美文网首页
Java——多态的理解

Java——多态的理解

作者: iristian | 来源:发表于2021-01-06 15:14 被阅读0次

    1.多态就是父类的引用指向子类的对象
    2.编译看左边,执行看右边


    image.png
    image.png

    3.子类中定义了与父类中同名同参数的方法,在多态的情况下,运行时调用的是对应子类的该方法


    image.png
    4.子类和父类的互相转换
    -子类转换成父类是可以自动进行的,也就是多态,注意子类赋值给父类(实际上就是多态),调用的方法还是子类的方法,调用的属性是父类的属性(详情见5的代码)
    -父类转换成子类,需要用instanceof判断,然后再强制转化,此时转换以后,就是类型是子类的类型,对象也是子类的对象了
    例如,
    Person p = new Student();
    if (p instanceof Student) {
    Student s = (Student)p;
    }
    
    image.png
    image.png

    5.代码1

    public class FieldMethodTest {
        public static void main(String[] args) {
            Sub s = new Sub();
            System.out.println(s.count);
            s.display();
            Base b = s;
            System.out.println(b == s);
            System.out.println(b.count);
            b.display();
        }
    }
    
    class Base {
        int count = 10;
    
        public void display() {
            System.out.println(this.count);
        }
    }
    
    class Sub extends Base {
        int count = 20;
    
        public void display() {
            System.out.println(this.count);
        }
    }
    

    运行结果

    20
    20
    true
    10
    20
    
    

    6.代码2

    public class FieldMethodTest {
        public static void main(String[] args) {
            Base s = new Sub();
            s.display();//28
            System.out.println(s.b);//5
            //System.out.println(s.a);//报错,提示Base中没有这个属性
            System.out.println(s.count);//10
        }
    }
    
    class Base {
        int count = 10;
        int b = 5;
    
        public void display() {
            System.out.println(this.count);
        }
    }
    
    class Sub extends Base {
        int count = 20;
        int a = 3;
    
        public void display() {
            System.out.println(this.count + a + b);
        }
    }
    

    运行结果

    28
    5
    10
    

    相关文章

      网友评论

          本文标题:Java——多态的理解

          本文链接:https://www.haomeiwen.com/subject/tphwoktx.html