封装性、继承性、多态性
继承性是多态的前提下,没有继承就没有多态。(后期会有多态相关的更新)
继承性主要的作用(可以解决的问题):可以提取出多个类中的共同的特性,从而减少代码量,提高开发效率。例如:老师类和学生类中,都有学习、吃饭、睡觉等行为,所以可以将这些共有的特性提取出来,而这些行为都是人所必需的的,所以可以将这些行为放入一个“人”的类中,让老师和学生都来继承人类的这些行为。
继承的特点:
子类可以拥有(继承)父类的内容子类也可以拥有自己专有的内容定义格式:
public class Person { //父类 //代码块 } public class Teacher extends Person { //子类1 //代码块 } public class Student extends Person { //子类2 //代码块 }如上图所示,第一条输出为用父类对象调用父类的成员方法;第二条输出是用子类调用子类的成员方法,但是子类中没有定义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.成员方法名)