目录
一、什么是继承?
二、继承的作用及优缺点:
继承的作用:
继承的优缺点:
继承的图形举例如下:例如图形类与下列各类图形
三、继承的语法定义:
继承语法格式如下:
Java是单继承:
四、方法重写
方法重写的概述:
方法重写的格式:
五、super关键字与继承关系中构造方法的执行先后问题?
什么是super关键字及功能?
举例说明
this与super关键字的区别
一、什么是继承?
解析:1.继承是面向对象的三大特征之一。
2.继承是一种关系,就行两类之间的关系,至少有两个类。通说来说就像是子承父业。
3.继承就是一个类A继承了另一个类B的所有成员,并且能够访问使用那些非私有成员。
4.Java中的继承就是在已经存在类的基础上进行扩展,从而产生新的类。已经存在的类称为父类、基类或超类,而新产生的类称为子类或派生类。
5.在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法。
二、继承的作用及优缺点:
-
继承的作用:
解析:1.继承的一个很重要的意义就是能够减少代码的冗余
2.继承和现实生活中的“继承”的相似之处是保留一些父辈的特性,从而减少代码冗余,提高程序运行效率。
-
继承的优缺点:
解析:优点:
- 实现代码共享,减少创建类的工作量,使子类可以拥有父类的方法和属性。
- 提高代码维护性和可重用性。
- 提高代码的可扩展性,更好的实现父类的方法。
缺点:
- 继承是侵入性的。只要继承,就必须拥有父类的属性和方法。
- 降低代码灵活性。子类拥有父类的属性和方法后多了些约束。
- 增强代码耦合性(开发项目的原则为高内聚低耦合)。当父类的常量、变量和方法被修改时,需要考虑子类的修改,有可能会导致大段的代码需要重构。
-
继承的图形举例如下:例如图形类与下列各类图形
解析:1.继承是面向对象的三大特征之一。
2.继承是一种关系,就行两类之间的关系,至少有两个类。通说来说就像是子承父业。
3.继承就是一个类A继承了另一个类B的所有成员,并且能够访问使用那些非私有成员。
4.Java中的继承就是在已经存在类的基础上进行扩展,从而产生新的类。已经存在的类称为父类、基类或超类,而新产生的类称为子类或派生类。
5.在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法。
-
继承的作用:
解析:1.继承的一个很重要的意义就是能够减少代码的冗余
2.继承和现实生活中的“继承”的相似之处是保留一些父辈的特性,从而减少代码冗余,提高程序运行效率。
-
继承的优缺点:
解析:优点:
- 实现代码共享,减少创建类的工作量,使子类可以拥有父类的方法和属性。
- 提高代码维护性和可重用性。
- 提高代码的可扩展性,更好的实现父类的方法。
缺点:
- 继承是侵入性的。只要继承,就必须拥有父类的属性和方法。
- 降低代码灵活性。子类拥有父类的属性和方法后多了些约束。
- 增强代码耦合性(开发项目的原则为高内聚低耦合)。当父类的常量、变量和方法被修改时,需要考虑子类的修改,有可能会导致大段的代码需要重构。
-
继承的图形举例如下:例如图形类与下列各类图形
三、继承的语法定义:
-
继承语法格式如下:
public class Father{
}
public class Son extends Father{// 基于类Father已有成分的基础上扩展出Son这个子类
}
继承语法格式如下:
特别注意:Java 语言摒弃了 C++ 中难以理解的多继承特征,即 Java 不支持多继承,只允许一个类直接继承另一个类,即子类只能有一个直接父类,extends 关键字后面只能有一个类名。
-
Java是单继承:
Java单继承解析:
很多地方在介绍 Java 的单继承时,可能会说 Java 类只能有一个父类,严格来讲,这种说法是错误的,应该是一个类只能有一个直接父类,但是它可以有多个间接的父类。
举例如下:三角形类继承多边形类,多边形类继承图形类,那么图形类是三角形的间接父类。下图 展示了单继承的关系。
四、方法重写
-
方法重写的概述:
解析:1.当父类继承下来的方法不满足子类需要的时候,可以写一个和父类声明一样的方法,方法体中逻辑重新实现,这个子类重新定义的方法就是重写后的方法。
2.重写后的方法会覆盖父类的功能,因此成为方法重写,也就是方法的覆盖。
3.当我们要重写父类的一个方法时,一般的做法就是定义一个声明一样的方法,方法体逻辑重写。简而意之,声明不变,重新实现
方法重写的概述:
解析:1.当父类继承下来的方法不满足子类需要的时候,可以写一个和父类声明一样的方法,方法体中逻辑重新实现,这个子类重新定义的方法就是重写后的方法。
2.重写后的方法会覆盖父类的功能,因此成为方法重写,也就是方法的覆盖。
3.当我们要重写父类的一个方法时,一般的做法就是定义一个声明一样的方法,方法体逻辑重写。简而意之,声明不变,重新实现
注意:与方法的重载不同,方法重载在同一个类中进行,而方法重写是在非本类中进行。
-
方法重写的格式:
声明:作用域修饰符 静态关键字 返回值类型 方法名 (参数列表) {
方法体;
}// 其中方法体必须和父类不一致!
注意事项:子类方法覆盖父类方法,必须要保证**权限大于等于父类权限** 其中权限是指作用域修饰符
举例如下:
父类:
public class Father {
public void show(){
System.out.println("我是父类的方法");
}
}
子类:其中子类的作用域修饰符必须要保证权限大于等于父类权限,否则不会通过编译
public class Son extends Father{
// 子类的重写父类的方法
public void show(){
System.out.println("我是子类的方法");
}
}
五、super关键字与继承关系中构造方法的执行先后问题?
-
什么是super关键字及功能?
解析:就是可以用来访问父类的构造方法、普通方法和属性。
-
举例说明
什么是super关键字及功能?
解析:就是可以用来访问父类的构造方法、普通方法和属性。
举例说明
为了验证super关键字与继承关系中构造方法的执行先后问题举例如下:
父类:
package com.feisi.week2.day4;
public class Father {
// 父类的成员变量
int num1 = 100;
// 父类构造方法
public Father() {
System.out.println("我是父类的构造方法");
}
// 父类普通方法
public void show(){
System.out.println("我是父类的普通方法");
}
}
子类:
package com.feisi.week2.day4;
public class Son extends Father{
// 子类成员变量
int num1 = 150;
// 子类的构造方法
public Son() {
System.out.println("我是子类的构造方法");
}
// 子类的重写父类的普通方法
public void show(){
// 子类局部变量
int num1 = 200;
System.out.println(num1);// 就近原则输出子类局部变量
System.out.println(this.num1);// 使用this关键字输出子类的成员变量
System.out.println(super.num1);// 使用super关键字输出父类的成员变量
System.out.println("我是子类的普通方法");
}
}
测试类:
package com.feisi.week2.day4;
public class Test2 {
public static void main(String[] args) {
// 创建子类对象
Son son = new Son();
// 测试
son.show();
}
}
运行结果:由此 结果不难看出父类构造方法比子类构造方法先执行,且使用super关键字可以调用父类成员变量
-
this与super关键字的区别
1.this与super的简述:this 指的是当前对象的引用,super 是当前对象的父对象的引用。
2.简单介绍一下 super 和 this 关键字的用法:
super 关键字的用法:
- super.父类属性名:调用父类中的属性
- super.父类方法名:调用父类中的方法
- super():调用父类的无参构造方法
- super(参数):调用父类的有参构造方法
this 关键字的用法:
- this.属性名:表示当前对象的属性
- this.方法名(参数):表示调用当前对象的方法
- 当局部变量和成员变量发生冲突时,使用this进行区分
3. 关于 Java super 和 this 关键字的异同,可简单总结为以下几条:
- 子类和父类中变量或方法名称相同时,用 super 关键字来访问。可以理解为 super 是指向自己父类对象的一个指针。在子类中调用父类的构造方法。
- this 是自身的一个对象,代表对象本身,可以理解为 this 是指向对象本身的一个指针。在同一个类中调用其它方法。
- this 和 super 不能同时出现在一个构造方法里面,因为 this 必然会调用其它的构造方法,其它的构造方法中肯定会有 super 语句的存在,所以在同一个构造方法里面有相同的语句,就失去了语句的意义,编译器也不会通过。
- this( ) 和 super( ) 都指的是对象,所以,均不可以在 static 环境中使用,包括 static 变量、static 方法和 static 语句块。
- 从本质上讲,this 是一个指向对象本身的指针, 然而 super 是一个 Java 关键字。



