zoukankan      html  css  js  c++  java
  • Java中继承的规则

    一、子类中对父类构造函数的调用规则

    1、如果不显式指定,子类中的构造函数会默认调用父类中的无参构造

    测试代码

    package day07;
    
    import java.sql.Date;
    
    import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter.DEFAULT;
    
    class Parent{
    
        private String name;
    
        private int age; 
    
        public Parent(){
    
                  System.out.println("Person()");
    
        } 
    
        public Parent(String name){
    
                  System.out.println("Person(String name)");
    
                  this.setName(name);
    
        } 
    
        public Parent(String name, int age){
    
                  System.out.println("Person(String name, int age)");
    
                  this.setName(name);
    
                  this.setAge(age);
    
        } 
    
        public void setName(String name){
    
                  this.name = name;
    
        } 
    
        public void setAge(int age){
    
                  this.age = age;
    
        }
    
    }
    
    
    
    class Child extends Parent{
    
    
    
        public Child(){
    
                  System.out.println("Child()");
    
        } 
    
        public Child(String name){
    
                  System.out.println("Child(String name)");
    
        } 
    
        public Child(String name, int age){
    
                  System.out.println("Child(String name, int age)");
    
        }
    
    }
    
    
    
    public class StaticKey{
    
        public static void main(String args[]){
    
                  Child c1 = new Child();
    
                  Child c2 = new Child("张三");
    
                  Child c3 = new Child("张三", 15);
    
        }
    
    }

    输出

     Person()  

     Child()
     Person()
     Child(String name)
     Person()
     Child(String name, int age)

    如果此时父类中没有无参构造,则编译会报错,如:

    上面的代码编译时会出现如下错误提示:

    ExtendsDemo.java:13: 错误: 无法将类 Parent中的构造器 Parent应用到给定类型;
            public Child(){
                          ^
      需要: String,int
      找到: 没有参数
      原因: 实际参数列表和形式参数列表长度不同
    1 个错误

    2、如果父类中有多个构造函数,可以使用“super(参数列表)”的格式显式地调用父类中指定构造函数,如上述代码在Child类中做如下修改后就可以消除上面的编译错误。

    class Child extends Parent{

             public Child(){

                 super("bing", 30);

                 System.out.println("Child()");

             }

    }

    二、子类中对父类函数的覆写规则

    1、子类覆写父类中的函数时,访问权限只能扩大,不能减小

    2、父类中private权限的函数无法被子类覆写

    测试代码:

    class Parent{
    
             public void print(){
    
                       System.out.println("Parent: print()");
    
             } 
    
             public void fun(){
    
                       this.print();
    
             }
    
    }
    
     
    
    class Child extends Parent{
    
             public void print(){
    
                       System.out.println("Child: print()");
    
             }
    
    }
    
     
    
    public class ExtendsDemo01{
    
             public static void main(String args[]){
    
                       Child c1 = new Child();
    
                       c1.print();
    
                       c1.fun();
    
             }
    
    }

    分别将Parent类中的print()方法的权限修改为private、default和public,然后在Child类中进行覆写,输出结果如下表所示。

    ------------------------------------------

    父类         子类           输出

    ------------------------------------------

    private      default        Child: print()

                                    Parent: print() 

    private      public         Child: print()

                                    Parent: print() 

    default      default        Child: print()

                                    Child: print() 

    default      public         Child: print()

                                    Child: print()

    public       public          Child: print()

                                    Child: print()

    ------------------------------------------

  • 相关阅读:
    webpack学习遇到大坑(纯属自己记录)
    git忽略某些文件提交
    数据结构(一)创建并遍历线性列表
    数据结构二 顺序表的创建
    JqGrid动态改变列名
    构造DataTable
    计算机存储数据的单位
    .NET Core在WindowsServer服务器部署(使用Web Deploy发布)
    mysql ERROR 1045 (28000): 错误解决办法
    ASP.NET取得Request URL的各个部分
  • 原文地址:https://www.cnblogs.com/mmlovejj/p/5062591.html
Copyright © 2011-2022 走看看