当前位置: 代码迷 >> 综合 >> CoreJava——继承
  详细解决方案

CoreJava——继承

热度:42   发布时间:2024-02-08 12:41:29.0

概念

继承(英语:inheritance)是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

子类的创建可以增加新数据、新功能,可以继承父类全部的功能,但是不能选择性的继承父类的部分功能。继承是类与类之间的关系,不是对象与对象之间的关系。
如果某类B“继承”另某类A,就把这个B称为“A的子类或派生类(subclass)”,而把类A称为“B的父类”也可以称为“A是B的超类或基类(superclass)”。

在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。

继承的语句格式:
class 子类名 extends 父类名{}
class 父类 { } class 子类 extends 父类 { }

extends关键字
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。

implements关键字
implements 关键字可以变相的使Java具有多继承的特性,使用范围为类实现接口的情况,可以同时实现多个接口(接口之间采用逗号分隔)。

final关键字
final可以修饰类、变量、方法。
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写:
声明类:final class类名 {//类体}
声明方法:修饰符(public/private/default/protected) final返回值类型 方法名(){//方法体}
static关键字
static修饰成员变量(属性)和方法、代码块(不能出现在方法内部),static修饰变量(属性)和方法,得到的是类变量和类方法,类变量和类方法用所在类的类名直接调用。static和abstract不能一起使用。
由static修饰的变量和方法,不能用this调用。静态方法可以调用静态的方法,普通方法也可以调用静态方法,静态方法不能调用普通方法。

this关键字
this 关键字在Java方法中只能用在实例变量和实例方法上,不能用在由static、final修饰的类变量和类方法上
如果在Java方法中,实例化的成员变量和某方法的参数变量同名时,实例化的成员变量在这个方法内暂时失效(内部屏蔽外部),这时如果想在该方法中使用这被屏蔽的成员变量,用“this.成员变量名”的方式调用该成员变量,并且将参数变量赋值给this调用的成员变量,
格式如下:this.本类成员变量=局部参数变量;

super关键字
super是在子类中调用被屏蔽的成员变量和方法

注意:

1、父类中一般只定义一般属性和方法(这个一般可以理解为是子类共有的,这就是父类更通用,而子类拥有其他的,所以子类更具体)
2、子类中通过super关键字来调用父构造方法,并且需要放在构造方法的第一行
3、父类中public、protected修饰的属性和方法可以继承,private修饰的属性和方法不能被继承
4、规则:创建子类对象的时候,首先调用的是父类的无参构造方法创建一个父类对象
5、可以在子类中显示调用父类的有参构造方法
6、如果父类的属性均为private修饰,则可以通过共有的getter、setter方法来调用

继承案例:teacher类继承person类

person类:

class Person {public String name;public int age;public char gender;public Person(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}/** get方法区*/public String getName() {return name;}public int getAge() {return age;}public char getGender() {return gender;}/** 人具有的行为*/public void eat() {System.out.println(name + "在吃饭");}public void sleep() {System.out.println(name + "在睡觉");}
}

teacher类:

// 老师具有人的属性和自己个人的一些职业等属性
class Teacher extends Person {private String title;private String course;private String className;public Teacher(String name, int age, char gender, String title, String course, String className) {super(name, age, gender);// 必须放在第一行this.title = title;this.course = course;this.className = className;}/** get方法区*/public String getTitle() {return title;}public String getCourse() {return course;}public String getClassName() {return className;}/** 老师具有的行为*/public void teach() {System.out.println(getName() + "在教课");}// 这个方法重写了父类里面的eat方法,子类中重写的方法将覆盖父类里的原方法public void eat() {System.out.println("先出示自己的教师证");System.out.println(getName() + "在吃饭");}
}
class ExtendsDemo {public static void main(String[] args) {Teacher t = new Teacher("苍井空", 20, '女', "高级老师", "生物", "二班");/** 如果采用下面的方式构造和初始化,person类和teacher类中必须包含空参构造方法和set方法Teacher t = new Teacher();t.setName("苍井空");t.setAge(20);t.setGender('女');t.setTitle("高级老师");t.setClassName("二班");t.setCourse("生物");*/t.eat();t.sleep();t.teach();}
}
  • 控制台的输出:
    先出示自己的教师证
    苍井空在吃饭
    苍井空在睡觉
    苍井空在教课