上一周学习的总结
学习了对象之间类型的转换,是怎样应用的
下面就实际的代码实例 来进行讲解
public class stylechange {
public stylechange() {
}
}
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);这样做是可以的 因为子类会自动进行类型的转换*/
//B b =new B();
// A a=b;
// callA(a);
/*B b=a;
callA(b);这样做是不可以的,当在callA中传递的参数是A 的对象的时候,编译器不会通过*/
//callA(new A());//创建了一个A 类的对象并调用callA .这个时候callA 中再次为 对象a 强制类型 转换为b 这就会在执行的时候出现错误,在编译的时候无错误
//callA(new B());
callA(new B());
}
public static void callA (A a)
{
/* B b=(B)a;//把父类对象赋予给一个子类的对象是不行的如B b=a,必须进行强制类型转换如B b=(B)a.强制类型转换只是进行一下类型的说明,
//通过编译宜而已,而实际这个对象是什么类型还是什么类型,比如上边 callA(new A)传递进来的是类A的对象,转换后,成为B ,蒙混过编译器,但是在实际执行的时候,
//发现它是A 类所以不能执行b 的方法.
b.func1();
b.func2();
b.func3();
//a.func3();虽然传递的B 类,但是也不能引用a,让他进行调用func3*/
/*if(a instanceof B)
{
B b=(B)a;
b.func1();
b.func2();
b.func3();
}
else */
a.func1();
a.func2();
}
}
class Student extends Object { private String name; private int age; public Student(String name,int age) { this.name=name; this.age=age; } public boolean equals(Object obj)//obj 相当于父类,而student 相当于子类,obj 是一个子类对象话 就把 obj 类型转换成Student 赋值给子类对像. { 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("wangwu",25); Student st2=new Student("wangwu",25); if(st1.equals(st2)) { System.out.println("equals"); } else System.out.println("unequals"); } }