/*
对象的类型转换
1.子类对象可以自动转换成父类
2.父类转换成子类必须使用强制转换
3.instanceof操作符可以用它来判断一个实例对象是否属于一个类
4.Object类及equals方法
面向对象的多态性
1.应用程序不必为每一个派生类(子类)编写功能调用,只需要抽象基类进行处理即可;提高程序的复用性.
2.派生类的功能可以被基类的引用变量引用,这叫向后兼容;提高程序的可扩充性和可维护性.
*/
class A
{
public void func1()
{
System.out.println("A func1 is calling");
}
public void func2()
{
func1();
}
}
class B extends A
{
public void func1()
{
System.out.println("B func1 is calling");
}
public void func3()
{
System.out.println("B func3 is calling");
}
}
class C
{
public static void main(String[] args)
{
B b=new B();
callA(b);
/*A a=b;
callA(new A());*/
}
public static void callA(A a)
{
/*if(a instanceof B)
{
B b=(B)a;//对象的强制类型转换
b.func1();
b.func2();
b.func3();
}*/
a.func1();
a.func2();//"B func1 is calling"
}
}
/*
Object类和equals方法
*/
class Student //extends Object默认继承Object类
{
private String name;
private int age;
public Student(String name,int age)
{
this.name=name;
this.age=age;
}
public boolean equals(Object obj)
{
Student st=null;
if(obj instanceof Student)
{
st=(Student)obj;
if(st.name==name&&st.age==age)
return true;
else
return false;
}
else
return false;
}
public static void main(String[] args)
{
Student st1=new Student("zhangsan",20);
Student st2=new Student("zhangsan",20);
if(st1.equals(st2))
System.out.println("equals");
else
System.out.println("not equals");
}
}