【Java】继承

继承是面向对象编程中的一种重要概念,它可以用来实现代码的复用和封装。继承是指一个类可以继承另一个类的所有属性和方法。在Java中,继承使用关键字extends

通过继承,子类能够获取父类的所有属性和方法,并且可以扩展或修改它们。当一个子类继承自父类时,它会继承父类的公有(public)和受保护(protected)属性和方法,并且可以按需扩展和修改这些属性和方法。从而减少编写重复代码的工作量。

例子:一个简单的类继承关系:

public class Animal { // 定义一个Animal类
    private String name; // 动物名称
    public Animal(String name) {
        this.name = name;
    }
    public void eat() {
        System.out.println(name + "正在吃东西");
    }
}

public class Dog extends Animal { // 继承Animal类定义一个Dog类
    public Dog(String name) {
        super(name); // 通过super关键字调用父类构造方法
    }
    public void bark() {
        System.out.println("汪汪!");
    }
}

// 在另一个类中使用Dog类
public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog("小狗");
        dog.eat(); // 调用从父类继承过来的方法
        dog.bark(); // 调用自身的方法
    }
}
//在上述示例中,我们定义了一个Animal类,具有一个name属性和一个eat()方法。
//另外定义了Dog类继承自Animal类,通过super(name)调用Animal类的有参构造器初始化父类属性name,
//并新增了一个bark()方法。
//在创建Dog对象后,通过调用eat()和bark()方法,可以调用父类继承的方法和自身的方法。

注意:

子类继承父类后,父类的私有属性不会被直接继承。这是因为,父类的私有属性只能被父类自身的方法调用,无法被子类访问。因此,子类也无法直接获取或修改父类的私有属性。

一般情况下,我们需要使用公有的getter和setter方法来获取和修改父类的私有属性。getter和setter方法是一种常见的访问和修改私有属性的方式,它们可以通过方法访问私有属性,从而实现对私有属性的使用,并且可以对属性进行一定的控制和封装,提高代码的安全性和可维护性。

示例:

public class Parent {
    private String name;

    public Parent(String name) {
        this.name = name;
    }

    public String getName() { // getter方法
        return name;
    }

    public void setName(String name) { // setter方法
        this.name = name;
    }
}

public class Child extends Parent {
    public Child(String name) {
        super(name);
    }

    public static void main(String[] args) {
        Child child = new Child("小明");
        String name = child.getName(); // 使用getter方法获取父类的私有属性
        System.out.println(name); // 输出:小明
        child.setName("小华"); // 使用setter方法修改父类的私有属性
        name = child.getName(); // 再次使用getter方法获取父类的私有属性
        System.out.println(name); // 输出:小华
    }
}

在上述示例中,我们定义了一个Parent类,其中的name属性为私有属性,使用getter和setter方法来访问和修改该属性。然后定义了Child类继承自Parent类,并通过super(name)语句调用了父类构造方法完成父类的初始化。在Child类中,可以使用getter和setter方法来访问和修改父类的私有属性。

注意:

1:子类继承了父类所有的属性和方法非私有的方法和属性可以在子类中直接访问,但是私有的方法和属性不能在子类中直接访问,需要通过父类提供公共的方法去访问

2,子类调用构造器的时候默认第一个语句是super() ,(可不用写出, 默认调用父类的无参构造器)

3.当创建子类对象时,不管使用子类的那个构造器,默认情况下总会调用父类的无参构造器

如果父类没有提供无参构造器(或有个有参构造器),则必需在子类的构造器中用super指定使用父类的那个构造器完成对父类的初始化,否则,编译不会通过。

(但要是父类当中没有无参构造器,那必须使用super(, ,…);去指定一个父类当中的其他构造器)

4,如果想 调用父类的某个构造器,可以显示的调用一下:super(参数列表)

5,super()在使用的时候要放在构造器第一行,即优先调用父类的构造器

( 在Java中,如果子类没有显式地调用父类的构造器,则编译器会默认在子类的构造器中添加super()语句,以调用父类的无参构造器。这是因为如果不调用父类的构造器,父类的属性不会被初始化,可能会导致程序出错。

如果子类需要调用父类的有参构造器,则必须使用super()语句来显式调用父类的构造器,并传入必要的参数。该语句必须放在子类构造器的第一行,这是因为在Java中,构造器的执行顺序是从父类到子类,也就是说,子类的构造器在执行之前先调用了父类的构造器。)

6.对于super(),this(),并不是super.内容,this.内容后两者可以在成员方法中调用的,而前两者只能在构造器的首行(由于super()和this()都只能在首行,故不能同时出现在构造其中)

7.java所有类都是Object类的子类,Object是所有类的基类

8.父类构造器的调用不限于直接父类,将一直往上追溯到Object类(顶级父类),即可以一层层调用

9.一个子类只能继承一个父类(直接父类),即java是单继承机制

10.不能滥用继承,子类和父类必须满足is-a的关系(满足逻辑关系,才能继承):如:Cat extents Animal

  1. 当子类对象创建好后,就建立好查找的关系

属性:

方法:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值