//多態
public abstract class Animal {
public abstract void eat();
}
public class Cat extends Animal{
public void eat()
{
System.out.println("eat fish");
}
public void catchMouse()
{
System.out.println("catch mounse");
}
}
public class Dog extends Animal{
public void eat()
{
System.out.println("eat tone");
}
public void watch()
{
System.out.println("watch over");
}
}
public class Pig extends Animal {
public void eat()
{
System.out.println("eat food");
}
public void gongDi()
{
System.out.println("gong di");
}
}
/*
* 多態就可以理解爲事物存在的多種體現形態
*
* 人:男人,女人
* 動物:貓,狗
* 貓 x = new 貓();
* 動物 x = new 動物();
* 1,多態的體現
* 父類的引用指向了自己的子類對象
* 父類的引用也可以接收自己的子類對象
* 2,多態的前提
* 必須是類與類之間有關係,要麼繼承,要麼實現。
* 通常還有一個前提:存在覆蓋
* 3,多態的好處
* 多態的出現大大的提高了程序的擴展性
* 4,多態的弊端
* 提高了擴展性,但是隻能使用父類的引用訪問父類中的成員
* 5,多態的應用
*
* 6,多態的出現代碼中的特點(多態使用的注意事項)
*/
public class Welcome {
static final double PI = 3.14;
public static void main(String[] args) {
// TODO Auto-generated method stub
//Animal a = new Cat();//類型提升,向上轉型
//a.eat();
//如果想要調用貓的特有方法時,該怎麼做?
//強制將父類的引用,轉成子類類型,向下轉型
//Cat b = (Cat)a;
//b.catchMouse();
//千萬不要出現這種操作,就是將父類對象轉換成子類類型。
//我們能轉換的是父類應用指向了自己的子類的對象時,該應用可以被提升,也可以被轉換。
//多態自始至終都是子類對象在做着變化。
// Animal c = new Animal();
// Cat d = (Cat)c;
function(new Cat());
function(new Dog());
}
public static void function(Animal a)
{
a.eat();
if(a instanceof Cat)
{
Cat b = (Cat)a;
b.catchMouse();
}
else if(a instanceof Dog)
{
Dog b = (Dog)a;
b.watch();
}
else if(a instanceof Pig)
{
Pig b = (Pig)a;
b.gongDi();
}
}
}
public abstract class Student {
public abstract void study();
public void sleep()
{
System.out.println("lie sleep");
}
}
public class DoStudent {
public void doSome(Student stu)
{
stu.study();
stu.sleep();
}
}
public class AdStudent extends Student{
public void study()
{
System.out.println("ad study");
}
}
public class BaseStudent extends Student{
public void study()
{
System.out.println("bs study");
}
public void sleep()
{
System.out.println("sit sleep");
}
}
/*
* 基礎班學生
* 學習,睡覺
* 高級班學生
* 學習,睡覺
* 可以將這兩類事物進行抽取。
*/
public class Welcome {
public static void main(String[] args) {
// TODO Auto-generated method stub
DoStudent ds = new DoStudent();
ds.doSome(new BaseStudent());
ds.doSome(new AdStudent());
// BaseStudent bs = new BaseStudent();
// bs.study();
// bs.sleep();
// AdStudent as = new AdStudent();
// as.study();
// as.sleep();
}
}
public class MainPad{
public void usePCI(PCI p)//接口型引用指向自己的子類對象
{
if(p != null)
{
p.open();
p.close();
}
}
public void run()
{
System.out.println("mainpad run");
}
// public void useNetCard(NetCard c)
// {
// c.open();
// c.close();
// }
}
public interface PCI {
public void open();
public void close();
}
public class NetCard implements PCI{
public void open()
{
System.out.println("netcard open");
}
public void close()
{
System.out.println("netcard close");
}
}
public class SoundCard implements PCI {
public void open()
{
System.out.println("soundcard open");
}
public void close()
{
System.out.println("soundcard close");
}
}
/*
* 需求:
* 電腦運行實例
* 電腦運行基於主板
*/
public class Welcome {
public static void main(String[] args) {
// TODO Auto-generated method stub
MainPad mp = new MainPad();
mp.run();
mp.usePCI(new NetCard());
mp.usePCI(new SoundCard());
}
}
public interface UserInfoDao {
public void add(User user);
public void delete(User user);
}
public class UserInfoByJDBC implements UserInfoDao{
public void add(User user)
{
// 1,JDBC連接數據庫
// 2,使用sql語句添加數據
// 3,關閉連接
}
public void delete(User user)
{
// 1,JDBC連接數據庫
// 2,使用sql語句刪除數據
// 3,關閉連接
}
}
public class UserInfoHibernate implements UserInfoDao {
public void add(User user)
{
// 1,hibernate連接數據庫
// 2,使用sql語句添加數據
// 3,關閉連接
}
public void delete(User user)
{
// 1,hibernate連接數據庫
// 2,使用sql語句刪除數據
// 3,關閉連接
}
}
/*
* 需求:數據庫的操作。
* 數據是:用戶信息。
* 1,連接數據庫 JDBC Hibernate
* 2,操作數據庫
* c create r read u update d delete
* 3,關閉數據庫連接
*
*/
public class Welcome {
public static void main(String[] args) {
// TODO Auto-generated method stub
//JOptionPane.showMessageDialog(null, "yes, it is.", "this is a reality!", JOptionPane.INFORMATION_MESSAGE);
UserInfoDao ui = new UserInfoJDBC();
ui.add(user);
ui.delete(user);
}
}