Java学习之面向对象三大特征(继承性 1)

mac2022-06-30  93

面向对象的三大特征:

封装性、继承性、多态性

继承性是多态的前提下,没有继承就没有多态。(后期会有多态相关的更新)

继承性主要的作用(可以解决的问题):

可以提取出多个类中的共同的特性,从而减少代码量,提高开发效率。例如:老师类和学生类中,都有学习、吃饭、睡觉等行为,所以可以将这些共有的特性提取出来,而这些行为都是人所必需的的,所以可以将这些行为放入一个“人”的类中,让老师和学生都来继承人类的这些行为。

继承的特点:

子类可以拥有(继承)父类的内容子类也可以拥有自己专有的内容

定义格式:

public class Person { //父类 //代码块 } public class Teacher extends Person { //子类1 //代码块 } public class Student extends Person { //子类2 //代码块 }

- 继承实现:

public class Person {//父类 String name = "中国人"; public Person() { ///构造函数 } public void study(){ System.out.println("人要学习"); } } public class Teacher extends Person { //子类1 String name = "北京人"; public Teacher() { } } public class Main { public static void main(String[] args) { Person man = new Person(); //创建父类对象 man.study(); ///调用父类成员方法 Teacher teacher = new Teacher(); //创建子类对象 teacher.study(); //调用子类成员方法

如上图所示,第一条输出为用父类对象调用父类的成员方法;第二条输出是用子类调用子类的成员方法,但是子类中没有定义study成员方法,但是子类还继承了父类的成员方法,所以实际上是子类继承父类的成员方法所得到的结果。

成员变量重名

如上代码可以发现,父类有一个成员变量“name”,而子类也有一个成员变量“name”,并且子类又继承了父类的内容,那么怎么区分父类和子类的同名成员变量呢?

访问成员变量 首先我们要明确如何访问成员变量,这里有两种常用的方法:

直接通过对象访问成员变量。 Person man = new Person(); System.out.println(man.name);

2. 间接的通过成员方法访问成员变量。

public void study(){ System.out.println(this.name); System.out.println("人要学习"); }

如上代码,在Person的成员方法中添加一行访问成员变量的代码。

Person man = new Person(); man.study();

在主函数中调用Person类的成员方法。

有了上述的调用方法,则同名的情况下只需理清思路即可。

父类和子类存在同名成员变量,则可通过各自的对象直接访问。 (对象名.成员变量)

可以通过各自的成员方法访问成员变量。但是注意一点:若子类没有成员方法,则继承父类的,而父类成员方法中访问的是父类的成员变量,所以要想通过子类对象访问父类的成员变量,则可通过此特点实现。

通过子类访问父类的成员变量还有一种常用方法。

public void teach(){ System.out.println(super.name); }

如上图,子类中的成员方法调用父类的成员变量。(super.成员变量名)

在上述代码中可以发现this关键字。它用于成员方法访问本类的成员变量。 (this.成员方法名)
最新回复(0)