java继承中的构造方法和成员方法

学习时间

2020-11-27

学习内容

java继承中的构造方法

我们先了解一些知识

Object类
Object类是所有类的父类,简单地说就是,这个类是所有类的老祖宗,是类的源头,所有类都继承它

继承中的构造方法

子类中所有的构造方法默认都会访问父类中空参数的构造方法

因为子类会继承父类中的数据,可能还会使用父类的数据。
所以,子类初始化之前,一定要先完成父类数据的初始化。

其实每一个构造方法的第一条语句默认都是:super()
	
父类没有无参构造方法,子类怎么办?
a:在父类中添加一个无参的构造方法
b:子类通过super去显示调用父类其他的带参的构造方法
c:子类通过this去调用本类的其他构造方法
	本类其他构造也必须首先访问了父类构造方法

注意事项
super(…)或者this(….)必须出现在第一条语句上,否则就会报错

演示

package com.xupt.demo2;

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        dog.name="旺财";
        dog.eat();
        dog.sleep();
        System.out.println(dog.name);
        cat.name="咪咪";
        cat.eat();
        cat.sleep();
        System.out.println(cat.name);
    }
}
class Cat extends Animal{

}
class Dog extends Animal{
}

class Animal {
    public String name;
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public Animal(){
        System.out.println("这是animal类的构造方法");
    }
}

运行结果:

这是animal类的构造方法
这是animal类的构造方法
吃饭
睡觉
旺财
吃饭
睡觉
咪咪

因为父类的构造方法不参与继承,也就说明了:子类中所有的构造方法默认都会访问父类中空参数的构造方法

public class Test {
    public static void main(String[] args) {
        Cat cat = new Cat();
        Dog dog = new Dog();
        dog.name="旺财";
        dog.eat();
        dog.sleep();
        System.out.println(dog.name);
        cat.name="咪咪";
        cat.eat();
        cat.sleep();
        System.out.println(cat.name);
    }
}
class Cat extends Animal{

}
class Dog extends Animal{
}

class Animal {
    public String name;
    public void eat(){
        System.out.println("吃饭");
    }
    public void sleep(){
        System.out.println("睡觉");
    }
    public Animal(int a){
        System.out.println("这是animal类的构造方法");
    }
}

只要在父类的构造方法中加一个参数,就会发现立马报错,原因就是因为用户在手动创建一个构造方法的时候,原有默认的无参构造方法就会被覆盖,所以也就让子类new不出对象了,我们为了避免这种情况的发生,一般都会在父类手动创建一个等同于原有默认构造方法的构造方法,如:

class Animal {
    public Animal(int a){
        System.out.println("这是animal类的构造方法");
    }
    public Animal(){
        
    }
}

加上这个手动定义的构造方法就不会再报错了

public 类名(){

    }

关于构造方法,之前有过一片较为详细地描述
Java中的构造方法

java继承中的成员方法

特点

当子类的方法名和父类的方法名不一样的时候,就按照名字调用
当子类的方法名和父类的方法名一样的时候,就按照就近原则调用

通过子类调用方法:

a:先查找子类中有没有该方法,如果有就使用
b:在看父类中有没有该方法,有就使用
c:如果没有就报错
	//这里注释的1,2,3指的是对应关系
class Fu{
    public void haha(){
        System.out.println("fu haha");
    }
}
class Zi extends Fu{
    public void haha(){
        System.out.println("zi haha");
    }
    public void show(){
        haha();
        this.haha();
        super.haha();
    }
}
class Test {
    public static void main(String[] args) {
        Zi zi = new Zi();
        zi.show();
    }
}

运行结果:

zi haha
zi haha
fu haha

通过这个例子,可以看出
同名成员方法也采用的是就近原则。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值