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

    

 

posted @ 2021-04-12 14:34  katachip  阅读(51)  评论(0编辑  收藏  举报