-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模(例如动物与哺乳动物,爬行动物等)
-
extends的意思是“扩展”。子类是父类的扩展
-
JAVA中类只有单继承,没有多继承!“一个儿子只能有一个父亲,一个父亲可以有多个儿子”
-
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖,组合,聚合等。
-
继承关系的两个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。
-
子类和父类之间,从意义上讲应该具有"is a"的关系
-
object类(重点)
-
super(重点)(单独讲解)
-
方法重写(重点)(单独讲解)
关于此次代码包含三个分类为:Student类,Tercher类与Person类以及一个运行main()方法的Application主类
package com.oop.demo05; //人 Person:父类 //在Java中,所有的类,都默认直接或者间接继承Object类 public class Person /*extends Object*/{//extends Object加与不加对结果无影响 //public公共的,要让子类继承的话方法均要设置为public但是属性根据封装要为private但是get/set应为public //protected受保护的优先级高于default //default为默认权限,什么都不用写 //private private int money=10_0000_0000; public int getMoney() { return money; } public void say(){ System.out.println("说了一句话"); } }
此为Person类的主要代码,其实际上为Student类与Person类的父类
package com.oop.demo05; //学生 is 人:派生类或者子类 //子类继承了父类就会拥有父类的全部方法 public class Student extends Person{//即学生类继承了人的类 //Person person;若没有使用继承关系令两个类练习还可以使用这种组合的方式(将Person类作为Student类的属性) //Ctrl+H快捷键 可以显示该类有关的继承关系的树形结构 }
Student类并没有定义任何属性或者方法主要调用其父类:person类的属性与方法
package com.oop.demo05; //老师Teacher is Person 派生类或者子类 public class Teacher extends Person{ }
Teacher类也为Person类的子类,并未定义任何属性与方法,主要要通过调用其父类Person的属性与方法。
package com.oop; import com.oop.demo05.Person; import com.oop.demo05.Student; public class Application1 { public static void main(String[] args) { Student student = new Student(); student.say(); //System.out.println(student.money); Person person = new Person(); } }
此为运行Application主类的代码主要用于运行main()方法。
首先对于某类继承其父类的定义格式为:public class 类名 extends 父类名{}的格式这样的定义即表示此时定义的类为某个类的父类。例如:public class Teacher extends Person{}与public class Student extends Person{}
对于子类来说其继承了父类就会拥有父类的全部方法,其次如果父类的属性没有private属性时候(封装),也会拥有父类的该属性,对于两个类之间的关系除了继承的关系外,还包括依赖,组合,聚合等,如上方Student类中的注释有Person person;直接定义一个Person类的对象在该Student类中,这表示两个类之间的组合关系。
对于父类Person类的定义中,包含着一个private属性money按照封装来设定还包含对money的调用的get方法(此方法本身也是public属性可以被所有类调用),还定义了一个void属性的方法可以被其所有的子类直接调用。
对于修饰符(public protected default private优先级为由高到低)之间的区别public可以被所有类直接(子类)或间接调用,对于Protected权限与public的区别有不能再一个子类中访问另一个子类的Protected权限的方法尽管二者继承于同一个子类,其余方面Protected权限类似于public权限,对于default权限为默认的权限当在方法或者属性前面不加修饰符时便默认为default权限它的要求是只能在同一个包类的Java类中直接或者间接调用不在同一个包内的方法进行调用会发生报错,对于最后的private任何时候都不能对被其修饰的属性进行调用,只能通过public定义的set/get方法来设立。例如Person类中有private定义的money属性以及供其他类调用的public的getMoney方法。
对于Application主类中的代码:当new了一个Student类的student对象后,就可以通过student.say()来调用其父类Person的say()方法。对于此时student.money则无法进行调用因为父类Person类中的money属性为private修饰。
对于Object类实际上可以理解为所有类的父类,比如new一个student对象后打出student.后会自动出现各种方法(但实际上Student类与其父类Person类中都没有定义这些方法)这些方法实际上就是在Object类中,可以打出Object类按着Ctrl点击可以查看Object类中包含的方法,而对于类的定义中若没有显式的定义继承关系(即打出extends+类名)就默认继承Object类如果显式写出extends Object也和没有效果一致。
对于快捷键Ctrl+H快捷键 :可以显示该类有关的继承关系的树形结构。