码迷,mamicode.com
首页 > 编程语言 > 详细

Java中继承的规则

时间:2015-12-21 10:53:31      阅读:345      评论:0      收藏:0      [点我收藏+]

标签:

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

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()

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

Java中继承的规则

标签:

原文地址:http://www.cnblogs.com/mmlovejj/p/5062591.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!