标签:
一、子类中对父类构造函数的调用规则
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()
------------------------------------------
标签:
原文地址:http://www.cnblogs.com/mmlovejj/p/5062591.html