Java自学课程笔记3.1
2021年2月20日16点16分 JAVA自学课程笔记3.1 Test1.java: class A{ public void f(){ System.out.println("AAA"); } } class B extends A{ public void f(){ System.out.println("BBB"); } public void g(){ System.out.println("CCC"); } } public class Test1{ public static void main(String[] args){ B bb = new B(); A aa = new A(); aa = bb; aa.f(); B bb2 = (B)aa; bb2.f(); } } //运行结果: BBB BBB Test2.java: class A{ public void f(){ System.out.println("AAA"); } } class B extends A{ public void f(){ System.out.println("BBB"); } public void g(){ System.out.println("CCC"); } } public class Test2{ public static void main(String[] args){ B bb = new B(); A aa = new A(); //aa = bb; aa.f(); bb = (B)aa; bb.g(); } } //运行结果: AAA Exception in thread "main" java.lang.ClassCastException: class A cannot be cast to class B (A and B are in unnamed module of loader 'app') at test1.main(test1.java:23) Test3.java: class A{ public void f(){ System.out.println("AAA"); } } class B extends A{ public void f(){ System.out.println("BBB"); } public void g(){ System.out.println("CCC"); } } public class Test3{ public static void main(String[] args){ B bb = new B(); A aa = new A(); aa = bb; aa.f(); bb = (B)aa; bb.f(); } } //运行结果: BBB BBB 重写equal方法,通过判断元素的内容是否相同来返回true和false(JAVA自学课程笔记6): Test4: class A{ public int i; public A(int i){ this.i = i; } public boolean equals(Object obj){ if(this.i == obj.i) return true; else return false; } } public class Test4{ public static void main(String[] args){ A aa1 = new A(2); A aa2 = new A(2); System.out.println(aa1.equals(aa2)); } } //输出结果: 编译错误:找不到符号obj.i 原因:父类指向子类之后,无法访问子类所特有的成员。 Test5: class A{ public int i; public A(int i){ this.i = i; } public boolean equals(Object obj){ A aa = (A)obj; //obj是一切类的父类,当obj指向一个引用equal的子类时(即equal赋值给obj),父类obj可以通过强制转换被一个子类指向(即赋值给一局部变量子类)。总而言之,就是父类已经指向子类了,才可以强制转换。 //aa是一个A类的对象,特有i,可以直接使用,可以用来和当前类this的i对比。 if(this.i == aa.i) return true; else return false; } } public class Test5{ public static void main(String[] args){ A aa1 = new A(2); A aa2 = new A(2); System.out.println(aa1.equals(aa2)); } } //输出结果: true