探索Java核心特性:深入了解继承

发表时间: 2024-05-18 20:48

如现实生活中的继承,孩子继承父辈的财产,孩子可以直接拿父辈的财产来使用,Java中的继承是指在现有类的基础上定义一个新的类,现有类称为父类,新的类称为子类,子类会自动拥有父类的可继承的内容

多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可。多个类可以称为子类,单独那一个类称为父类、超类(superclass)或者基类。

继承描述的是事物之间的所属关系,这种关系是: is-a的关系。

定义

就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。

好处

1.提高代码的复用性。

2.类与类之间产生了关系,是多态的前提。

格式

通过extends关键字,可以声明一个子类继承另外一个父类,定义格式如下:

class 父类 {

...

}


class 子类 extends 父类 {

...

}

例如

// 1.父类

class Person {
String name;
int age;
public void eat() {
System.out.println(name + " 吃饭");
}
public void rest() {
System.out.println(name + " 休息");
}
}

// 2.子类

class Child extends Person {
}


class Adult extends Person {
}


class Worker extends Person {
}


// 3.测试类

public class InheritText {
public static void main(String[] args) {
Child c = new Child();
c.name = "小李";
c.age = 6;
c.eat();
c.rest();
Adult a = new Adult();
a.name = "马上有";
a.age = 28;
a.eat();
a.rest();
Person p = new Person();
p.name = "张三";
p.age = 20;
p.eat();
p.rest();
}
}

父类不可被继承的内容

1.被private修饰的

2.构造方法不能继承

通过getter/setter方法访问父类的private成员变量

继承后的特点:成员变量

成员变量不重名

如果子类父类中出现不重名的成员变量,这时的访问是没有影响的。

成员变量重名

如果子类父类中出现重名的成员变量,这时的访问是有影响的

子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用super关键字,修饰父类成员变量,类似于之前学过的this

格式

super.父类成员变量名

继承后的特点:成员方法

成员方法不重名

如果子类父类中出现不重名的成员方法,这时的调用是没有影响的。对象调用方法时,会先在子类中查找有没有对应的方法,若子类中存在就会执行子类中的方法,若子类中不存在就会执行父类中相应的方法

成员方法重名:重写(Override)

如果子类父类中出现重名的成员方法,这时的访问是一种特殊情况,叫做方法重写(Override)。

方法重写:子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。

示例

class Fu {
public void say() {
System.out.println("Fu shuo");
}
}


class Zi extends Fu {
//子类重写了父类的say方法
public void say() {
System.out.println("Zi shuo");
}
}


public class FzTest {
public static void main(String[] args) {
Zi z = new Zi();
// 子类中有say方法,只执行重写后的say方法
z.say();
}
}


继承后的特点:构造方法

1.构造方法的名字是与类名一致的。所以子类是无法继承父类构造方法的。

2.构造方法的作用是初始化成员变量的。所以子类的初始化过程中,必须先执行父类的初始化动作。子类的构造方法中默认有一个super(),表示调用父类的构造方法,父类成员变量初始化后,才可以给子类使用。

继承后子类构造方法特点:子类所有构造方法都会调用父类的无参构造

super和this

super和this的含义

super:代表父类的存储空间标识(可以理解为父亲的引用)。

this:代表当前对象的引用(谁调用就代表谁)。

uper和this的用法

this.成员变量 ‐‐ 本类的

super.成员变量 ‐‐ 父类的


this.成员方法名() ‐‐ 本类的

super.成员方法名() ‐‐ 父类的


this(...) ‐‐ 本类的构造方法

super(...) ‐‐ 父类的构造方法

子类的每个构造方法中均有默认的super(),调用父类的空参构造。手动调用父类构造会覆盖默认的super()。

super()和this()都必须是在构造方法的第一行,所以不能同时出现。

继承的特点

1.Java只支持单继承,不支持多继承。

2.一个类可以有多个子类。

3.Java支持多层继承(继承体系)。

顶层父类是Object类。所有的类默认继承Object,作为父类。

4.子类和父类是一种相对的概念。