java构造函数重载继承问题

Java规定,一个父类可以同时拥有多个子类,但一个子类只能有一个父类,即单重继承,允许多层继承,即子类还可以有自己的子类,在下一层继承关系中原先的子类就变成了父类,这样的继承关系就形成了继承树。
子类继承父类中所有可能被子类访问的成员变量,原则如下:
1.能够继承那些声明为public和protected的成员变量;2.能够继承同一包中的那些默认修饰符的成员变量;3.不能继承那些声明为private的成员变量;4.如果子类声明一个与父类成员变量同名的成员变量,则不能继承父类的成员变量,此时子类的成员变量称作隐藏了父类的成员变量。
对于成员方法的继承,都类似于上面的4条说法,把成员变量改成成员方法即可,此时子类的方法称为覆盖了父类中的那个方法。5.不能继承父类的构造方法。
虽然子类不能继承父类的构造方法,但是子类对象会调用父类的构造方法的。
调用构造方法的原则如下:
1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法,.2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类的对象的时候,首先执行父类无参数的构造方法,然后执行自己的构造方法。这句话有点不通,也不懂啥意思,试试就懂了。3. 如果子类调用父类带参数的构造方法,可以通过super(参数)调用所需要的父类的构造方法,切该语句做为子类构造方法中的第一条语句。4. 如果某个构造方法调用类中的其他的构造方法,则可以用this(参数),切该语句放在构造方法的第一条.
当一个类继承了某个类时,在子类的构造方法里,super()必须先被调用;如果你没有写,编译器会自动调用super()方法,即调用了父类的构造方法;
这并不是创建了两个对象,其实只有一个子类Sub对象;之所以需要调用父类的构造方法是因为在父类中,可能存在私有属性需要在其构造方法内初始化。
1 class Super {
public Super() {
System.out.println("Super");
8 class Sub extends Super {
public Sub() {
<span style="color: #
System.out.println("Sub");
<span style="color: #
<span style="color: #
<span style="color: # }
<span style="color: #
<span style="color: # public class Main {
<span style="color: #
public static void main(String[] args) {
<span style="color: #
Sub s = new Sub();
<span style="color: #
<span style="color: # }
1 class Usebefore {
String str1;
public Usebefore() {
// TODO Auto-generated constructor stub
System.out.println(".....default super constructor...1...........");
public Usebefore(String get1)
<span style="color: #
str1=get1;
<span style="color: #
System.out.println(str1);
<span style="color: #
<span style="color: #
public void play()
<span style="color: #
<span style="color: #
System.out.println("............1............");
<span style="color: #
<span style="color: #
<span style="color: #
<span style="color: # }
<span style="color: # public class Use extends Usebefore{
<span style="color: #
public Use() {
<span style="color: #
// TODO Auto-generated constructor stub
<span style="color: #
System.out.println(".....default super constructor...2...........");
<span style="color: #
<span style="color: #
public Use(String get2){
<span style="color: #
super(" diaoyong super constructor youcan constructor");
<span style="color: #
str1=get2;
<span style="color: #
System.out.println(str1);
<span style="color: #
<span style="color: #
public void play()
<span style="color: #
<span style="color: #
System.out.println("............2............");
<span style="color: #
<span style="color: #
public static void main(String args[]){
<span style="color: #
Use use=new Use();
<span style="color: #
use.play();
<span style="color: #
use=new Use("get2");
<span style="color: #
<span style="color: # }
.....default super constructor...1...........调用父类无参构造函数
.....default super constructor...2...........调用子类。。
............2............。。。。。。。。。。。。覆盖父类方法
diaoyong super constructor youcan constructor。。。。。。调用父类构造方法
阅读(...) 评论()}

我要回帖

更多关于 java构造函数重载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信