转载声明:文章来源:https://blog.csdn.net/weixin_45847691/article/details/125340364
一、继承
继承是面向对象程序设计语言的基石之一
只需在新的类中产生现有类的对象 的方式叫做组合,按照现有类的类型来创建新类的方式为继承
1、在java中使用 extends关键字实现类的继承机制
类Parent为父类,Child为子类。
2、通过继承子类会自动拥有基类(父类)所有的成员变量和方法。
3、一个子类只能有一个基类,一个基类可以有多个子类。就像一个儿子只能有一个父亲,但一个父亲可能会有多个儿子。故java只支持单继承,不支持多继承。,终极基类(父类)为java标准类Obiect。
举例:
public class TestPerson {
public static void main (String [] args) {
Student s1 = new Student();
s1.setAge(20);//调用父类方法
s1.setName("jiajia");//父类方法
s1.setSch("Sun school");//调用自己的方法
System.out.println(s1.getName());
System.out.println(s1.getAge());
System.out.println(s1.getSch());
}
}
class Person {
private String name;
private int age;
public void setName (String name) {
this.name = name;
}
public void setAge (int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
class Student extends Person {
private String school;
public void setSch(String school) {
this.school = school;
}
public String getSch() {
return school;
}
}
运行结果:
为了便于理解,在此画一下该程序内存中的深层原理。
如图:
相当于new了一个Student对象s1,该对象里面又包含一个父类对象Person。(为了方便理解,我将school、name都装在了heap中,实际上字符串常量应该在date segment中)所以子类比父类大,子类对象包含一个父类对象。即创建一个子类对象的时候,该子类对象包含了一个父类对象。
我们得知道这其中的过程是怎样的:其实java会自动在子类的构造器(构造方法)中插入对父类构造器的调用。,即使你不创建子类的构造器,java也会为你合成一个默认的构造器,该构造器同样的会调用基类构造器。
但是,如果没有默认的构造方法,或者想调用一个带参数的构造方法,这个时候super关键字就派上用场了。
二、super关键字
1、调用父类的构造方法
使用super();时,调用父类的无参构造方法
使用super(参数列表);调用父类的有参构造方法
注意: 调用父类构造方法是子类构造方法中需要做的第一步。
2、调用父类中被重写的方法、变量
用一个例子来说明
class FatherClass {
public int value;
public void f(){
value = 100;
System.out.println
("FatherClass.value="+value);
}
}
class ChildClass extends FatherClass {
public int value;
public void f() {
super.f();//调用父类的法f()方法
value = 200;//修改子类对象的value值
System.out.println
("ChildClass.value="+value);
System.out.println(value);
System.out.println(super.value);//父类中的成员变量值已经从0变为100
}
}
public class TestInherit {
public static void main(String[] args) {
ChildClass cc = new ChildClass();
cc.f();
}
}
运行结果:
三、方法重写(OverWrite)
当子类不满意父类中的方法时,可以重新写一遍。
在子类中可以根据需要重写从父类继承来的方法、但必须和父类的方法名、参数列表、返回类型一致。
子类中 可以 重新写 继承来的方法、但必须和父类的方法名、参数列表、返回类型一致。
这个问题很常见