一、对象的描述:
通过extends关键字让类与类之间产生继承关系。
多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。多个类可以称为子类,单独这个类称为父类或者超类。
PS:
1、子类可以直接访问父类中的非私有的属性和行为。
2、子类无法继承父类中私有的内容。
3、父类怎么来的?共性不断向上抽取而来的。
示例:
- class Person {
- String name;
- int age ;
- }
- class ExtendDemo {
- public static void main(String[] args){
- Student s = new Student();
- s. name = "zhangsan" ;
- s. age = 20;
- s.study();
- Worker w = new Worker();
- w. name = "lisi" ;
- w. age = 30;
- w.work();
- }
- }
- class Worker extends Person{
- void work(){
- System.out.println("worker work..." + age);
- }
- }
- class Student extends Person{
- void study(){
- System.out.println("student study..." + age);
- }
- }
- 最后运行结果
student study...20 woker work...30
由此可见,对象继承的几个好处:
1、继承的出现提高了代码的复用性。
2、继承的出现让类与类之间产生了关系,提供了多态的前提。
二、对象的特点:
Java只支持单继承,不支持多继承。
一个类只能有一个父类,不可以有多个父类。
原因:因为多继承容易出现问题。两个父类中有相同的方法,子类到底要执行哪一个是不确定的。
Java支持多层继承(继承体系):
C继承B,B继承A,就会出现继承体系。多层继承出现的继承体系中,通常看父类中的功能,了解该体系的基本功能,建立子类对象,即可使用该体系功能。
定义继承需要注意:
不要仅为了获取其他类中某个功能而去继承,类与类之间要有所属("is a")关系。
三、super关键字
在子父类中,成员的特点体现:
1.成员变量
this和super的用法很相似。
this代表本类对象的引用。
super代表父类的内存空间的标识。
当本类的成员和局部变量同名用this区分。
当子父类中的成员变量同名用super区分父类。
示例:
- class Fu{
- private int num = 4;
- public int getNum(){
- return num ;
- }
- }
- class Zi extends Fu{
- private int num = 5;
- void show(){
- System.out.println(this.num + "..." + super.getNum());
- }
- }
- class ExtendDemo{
- public static void main(String[] args){
- Zi z = new Zi();
- z.show();
- }
- }
最后程序运行结果
5...4
四、成员函数:
当子父类中出现成员函数一模一样的情况,会运行子类的函数。这种现象,称为覆盖操作,这是函数在子父类中的特性。在子类覆盖方法中,继续使用被覆盖的方法可以通过super.函数名获取。
函数两个特性:
1.重载,同一个类中。
2.覆盖,子类中,覆盖也称为重写,覆写,override。
- class Fu{
- public void show(){
- System.out.println("fu show run" );
- }
- }
- class Zi extends Fu{
- public void show(){
- System.out.println("zi show run" );
- }
- }
- class ExtendDemo{
- public static void main(String[] args){
- Zi z = new Zi();
- z.show();
- }
- }
最后程序运行结果
zi show run