继承
- 提高代码复用性
- 让类与类之间产生关系,有了这个关系才能体现多态的特性
- Java中只支持单继承.不支持多继承 :因为有安全隐患…当多个父类都定义了相同的功能,子类对象就不确定要运行哪一个… 但是java保留了这种机制,用另一种形式来表示—多实现
- Java支持多层继承.例如:A被B继承…B也可以被C继承
继承----变量
如果子类出现与父类 同名变量 时.
子类要访问本类对象变量用 this
子类要访问父类同名变量用 super
super 与this 的使用几乎一致
父类变量被private后,子类不可访问
简单代码展示----
class fu{
int num=6;
}
class zi extends fu{
int num=5;
public void zi(){
System.out.println(num); //访问了本类num变量
System.out.println(super.num); //访问了父类num变量
}
}
继承----函数重写(覆盖)
- 当子类继承父类,子类出现和父类相同的函数时,且该函数内容与父类不相同,这种情况就是重写了父类的函数… 简单说就是子类有与父类相同的功能,但功能内容不相同
- 子类想要重写父类的函数,必须保证子类权限大于等于父类权限,否则会编译失败()
- 重写不等于重载
- 重写时,如果想继续引用父类功能内容,可以 同super. 函数名
简单代码展示----
class fu{
public void method(){
System.out.println("父类方法");
}
}
class zi extends fu{
public void method(){
super.method(); //super引用父类功能内容
System.out.println("子类重写method");
}
}
继承----子父类中的构造函数( super() )
- 在子类对象初始化的时候,父类的空参数构造函数也会运行…那是因为子类构造函数第一行默认有一条隐藏语句 :super();
- super()----会访问父类中的空参数构造函数,且子类所有构造函数默认第一行都是super().
- 为什么子类一定要访问父类中的构造函数----因为父类中的数据,子类是直接获取的,当子类对象建立时,需要查看这些数据是如何被初始化的…
假如父类对数据A进行了初始化,而子类对象没有执行父类的构造函数,则子类的数据A就未初始化
.- 当父类中没有空参数构造函数,子类必须手动通过super()语句 来指定父类中的构造函数
- 注:super() 语句 跟 this() 用法相同,需写在构造函数第一行,只能存在一个,要么存在super(),要么存在this()
简单代码展示----
class fu {
int age;
String name;
fu() {
System.out.println("父类空参数构造函数");
}
fu(int age, String name) {
this.age = age;
this.name = name;
}
}
class zi extends fu {
zi() {
//super(); 子类构造函数第一行默认super()
}
zi(int age) {
this(); //这时.super()不存在,但是引用了zi(){}间接访问了super()
}
zi(int age, String name) {
super(age, name); //可以手动指定父类中的构造函数
}
}
继承简单总结代码演示
/*
* 用学生,老师,来体现继承
* 都有姓名年龄
* 都需要学习安全知识,但是学生还要学习语数英,老师要学习授课知识
*/
class person {
//提取共性数据
int age;
String name;
//对象初始化就具备年龄,姓名
person(int age, String name) {
this.age = age;
this.name = name;
}
public void study() {
System.out.println("学习安全知识");
}
//改名功能
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
//改年龄功能
public void setAge(String name) {
this.age = age;
}
public int getAge() {
return age;
}
}
class students extends person {
students(int age, String name) {
super(age, name); //super语句引用父类构造函数
}
//重写study方法
public void study() {
super.study(); //引用保留父类功能内容
System.out.println("学习语数英知识"); //子类对象特有的功能内容
}
}
class teacher extends person {
teacher(int age, String name) {
super(age, name); //super语句引用父类构造函数
}
//重写study方法
public void study() {
super.study(); //引用保留父类功能内容
System.out.println("学习授课知识");
}
//本类对象特有的功能
public void meeting() {
System.out.println("开会");
}
}
public class DEMO {
public static void main(String[] args) {
students s1 = new students(12, "古天乐");
s1.study();
System.out.println("------------------");
teacher t1 = new teacher(22, "周润发");
t1.study();
}
}