class Fu
{
int num = 5;
void method1()
{
System.out.println("fu method_1");
}
void method2()
{
System.out.println("fu method_2");
}
static void method4()
{
System.out.println("fu method_4");
}
}
class Zi extends Fu
{
int num = 8;
void method1()
{
System.out.println("zi method_1");
}
void method3()
{
System.out.println("zi method_3");
}
static void method4()
{
System.out.println("zi method_4");
}
}
class DuoTaiDemo4
{
public static void main(String[] args)
{
// Fu f = new Zi();
//
// System.out.println(f.num);//5
//
// Zi z = new Zi();
// System.out.println(z.num);//8
//f.method1(); //zi method_1
//f.method2(); //fu method_2
//f.method3(); //编译失败,找不到method3()
Fu f = new Zi();
f.method4(); //fu method_4
Zi z = new Zi();
z.method4(); //zi method_4
/*
在多态中成员函数(即非静态)的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的
方法。如果有,编译通过。如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边
*/
// Zi z = new Zi();
// z.method1();//zi method_1
// z.method2();//fu method_2
// z.method3();//zi method_3
}
}
-------------------------------------------------------------------------------------------
/*
需求:
电脑运行实例,
电脑运行基于主板。
*/
interface PCI //接口
{
public void open();
public void close();
}
class MainBoard
{
public void run()
{
System.out.println("mainboard run");
}
public void usePCI(PCI p)//PCI p = new NetCard() 接口型引用指向自己的子类对象
{
if(p!=null)
{
p.open();
p.close();
}
}
}
class NetCard implements PCI //实现接口,
{
public void open()
{
System.out.println("newcard open");
}
public void close()
{
System.out.println("newcard close");
}
}
class SoundCard implements PCI //实现接口,
{
public void open()
{
System.out.println("soundcard open");
}
public void close()
{
System.out.println("soundcard close");
}
}
/*
class MainBoard
{
public void run()
{
System.out.println("mainboard run");
}
public void useNetCard(NetCard c)
{
c.open();
c.close();
}
}
class NetCard
{
public void open()
{
System.out.println("newcard open");
}
public void close()
{
System.out.println("newcard close");
}
}
*/
class DuoTaiDemo5
{
public static void main(String[] args)
{
MainBoard mb = new MainBoard();
mb.run();
//mb.useNetCard(new NetCard());
mb.usePCI(null);
mb.usePCI(new NetCard());
mb.usePCI(new SoundCard());
}
}
----------------------------------------------------------------------------------------------------
/*
需求:数据库的操作
数据是:用户信息
1,连接数据库.JDBC Hibernate
2,操作数据库
c create
r read
u update
d delete
3,关闭数据库连接
*/
interface UserInfoDao
{
public void add(User user);
public void delete(User user);
}
class UserInfoByJDBC implements UserInfoDao //实现接口
{
public void add(User user)
{
// 1,JDBC连接数据库
// 2,添加数据
// 3,关闭连接
}
public void delete(User user)
{
// 1,JDBC连接数据库
// 2,删除数据
// 3,关闭连接
}
}
class UserInfoByHibernate implements UserInfoDao
{
public void add(User user)
{
// 1,Hibernate连接数据库
// 2,添加数据
// 3,关闭连接
}
public void delete(User user)
{
// 1,Hibernate连接数据库
// 2,删除数据
// 3,关闭连接
}
}
class DBOperate
{
public static void main(String[] args)
{
// UserInfoByJDBC ui = new UserInfoByJDBC();
UserInfoDao ui = new UserInfoByJDBC();//父类的引用指向自己的子类对象
ui.add(user);
ui.delete(user);
}
}
--------------------------------------------------------------------------------------------------------
/*
Object:是所有对象的直接或者间接父类。
该类中定义的肯定是所有对象都具备的功能
Object类中已经提供了对对象是否相同的比较方法。
如果自定义类中也有比较相同的功能,没有必要重新定义。
只要沿袭父类中的功能,建立自己特有比较内容即可。
这就是覆盖。
*/
class Demo //extends Object
{
private int num;
Demo(int num)
{
this.num = num;
}
public boolean equals(Object obj) // Object obj = new Demo();复写Object中的方法
{
if(!(obj instanceof Demo))//判断obj是否是Demo类
return false;
Demo d = (Demo)obj;//将Object类型强转为Demo类型
return this.num == d.num;
}
// public boolean equals(Demo d)//参数类型不一样,是重载
// {}
/*
public boolean compare(Demo d)
{
return this.num == d.num;
}
*/
public String toString()
{
return "demo:"+num;
}
}
class Person
{}
class ObjectDemo
{
public static void main(String[] args)
{
Demo d1 = new Demo(4);
System.out.println(d1.toString());
Demo d2 = new Demo(7);
System.out.println(d2.toString());
// Demo d2 = new Demo(4);
// Person p = new Person();
//
// System.out.println(d1.equals(d2));
// System.out.println(d1.equals(p));
// Class c = d1.getClass();//获取类
//
// System.out.println(d1.toString());
// System.out.println(c.getName());//获取类名
// System.out.println(c.getName()+"@@"+Integer.toHexString(d1.hashCode()));
}
}
-----------------------------------------------------------------------------------------------------------------
个人总结:多态成员函数(非静态),编译看左边,运行看右边。多态成员变量和
静态成员函数,编译和运行都看右边。注意掌握instanceof和equals关键字。