zoukankan      html  css  js  c++  java
  • java 的继承,深入理解

    一切来源于一个问题:“如果超类中的方法,没有访问控制,什么限定符都没用,那在子类中覆盖这个方法,并定义成private可以吗,怎么验证呢?” 

    思路办法:编码测试之~ 


    public
    class aTest { public void hello() {} } public class bTest extends aTest{ private void hello() {} } /** *编译报错,子类尝试覆盖父类的方法,但是却赋予了较低的权限private */

    这么设计,考虑到向上转型,父类引用才能动态连接调用子类的方法,应该是基于这个考虑,如果不太理解原因,可以继续往下看。


    以下是扩展测试,有兴趣可以继续看:(先写结论,若知道结论,可以跳过对应段解释)

    1.对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将会调用子类中的这个方法,这就是动态连接。 

    View Code
    public class aTest {
        public void hello() {
            System.out.println("hello aTest");
        } 
    }
     
    public class bTest extends aTest{
        public void hello() {
            System.out.println("hello bTest");
        }
    }
     
    public class Test {
        public static void main(String[] args) {
            aTest a = new bTest();
            a.hello();
        }
    }
    /*Output:
      hello bTest
    *///~

    2.如果子类没有覆盖父类的方法,父类引用则调用父类中声明的方法。但是父类引用不能调用父类中定义的private方法。 

    View Code
    public class aTest {
        private hello() {}
    }
     
    public class bTest extends aTest{
     
    }
     
    public class Test {
        public static void main(String[] args) {
            aTest a = new bTest();//申请bTest对象,用aTest引用指向
            a.hello();//!!!编译报错
        }
    }

    3.子类可以继承父类的静态属性和静态方法,但是不可以重写静态方法。

    View Code
    public class aTest {
        public static void hello() {
            System.out.println("hello aTest");
        } 
    }
     
    public class bTest extends aTest{
        public static void hello() {
            System.out.println("hello bTest");
        }
    }
     
    public class Test {
        public static void main(String[] args) {
            aTest a = new bTest();
            a.hello();
        }
    }
    /*Output:
     hello aTest
    *///:~
     
    //解释:因为bTest的hello()方法没有覆盖父类的方法,所以aTest的引用hello(),还是调用父类的方法

     

  • 相关阅读:
    苹果快速的修复了Mac OS High Sierra 上出现了root的漏洞
    Codeforces Round #525 (Div. 2) C. Ehab and a 2-operation task
    2018CHD-ACM新生赛(正式赛)E.解救迷茫的草滩小王子
    2018CHD-ACM新生赛(正式赛)D.刀塔大师lwq I
    2018CHD-ACM新生赛(正式赛)C.绝望のRevue
    最小生成树——克鲁斯克算法+一道例题
    求连通分量个数+判定二分图
    动态规划——滚动数组(省内存)
    [BZOJ 1491] [NOI 2007] 社交网络
    SPOJ 8222 Substrings 后缀自动机
  • 原文地址:https://www.cnblogs.com/yanghuahui/p/2619145.html
Copyright © 2011-2022 走看看