欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-03 20:33:07
学习时间2020-11-27学习内容java继承中的构造方法我们先了解一些知识Object类Object类是所有类的父类,简单地说就是,这个类是所有类的老祖宗,是类的源头,所有类都继承它继承中的构造方法子类中所有的构造方法默认都会访问父类中空参数的构造方法因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化。其实每一个构造方法的第一条语句默认都是:super()父类没有无参构造方法,子类怎么办?a:在父类中添加一个无参的构造...

学习时间

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

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

本文地址:https://blog.csdn.net/championmmm/article/details/110245780

相关标签: java 编程语言