JavaSE小笔记--09继承

1.面向对象——继承

A.实现   

1)使用 extends关键字实现继承

2) Student extends Person, Student类称为子类/派生类, Person称为父类/基类/超类

3)子类继承了父类之后,就自动拥有了父类中定义的实例变量和实例方法

4)在子类中,可以对父类进行扩展,即增加子类特有的属性和方法

B.利弊

继承的好处

a:提高了代码的复用性

b:提高了代码的维护性

c:让类与类之间产生了关系,是多态的前提继承的弊端类的耦合性增强了。开发的原则:高内聚,低耦合。

         耦合:类与类的关系

内聚:就是自己完成某件事情的能力

例子:定义计算机类,继承了CPU类

因为CPU是计算机的一个组件,CPU有的属性和行为,计算机都有,虽然可以通过继承实现代码的复用.但是,这种整体体与部分关系的类,建议使用组合,即把部件作为整体类的一个属性

组合:public class Compuer{               

                      Cpu  cpu;

            }

C.继承的特点

a:Java只支持单继承,不支持多继承。多继承会出现调用的不确定性,所以不支持

b:Java支持多层继承(继承体系)

Java中类的继承特点

如果想用这个体系的所有功能用最底层的类创建对象

如果想看这个体系的共性功能,看最顶层的类

D.注意事项

(1).子类只能继承父类所有非私有的成员(成员变量和成员方法)

(2).子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法

(3).不要为了部分功能去继承

(4).继承体现的是一种 is  a  的关系

(5).子父类中出现同名的成员变量是,会根据就近原则使用。——这种情况开发中不会出现,没意义

(6).虽然可以通过子类名或者子类对象名访问到父类的静态成员,但是这不是继承

2.面向对象(this和super的区别)

A:this 和 super都代表什么

            this:代表当前对象的引用,谁来调用我,我就代表谁

            super:代表当前对象父类的引用

B:this 和 super的使用区别

a:调用成员变量

this.成员变量    调用本类的成员变量,也可以调用父类的成员变量

super.成员变量    调用父类的成员变量

b:调用构造方法

this(...)    调用本类的构造方法

super(...)    调用父类的构造方法

c:调用成员方法

this.成员方法    调用本类的成员方法,也可以调用父类的方法

super.成员方法    调用父类的成员方法

3.继承中构造方法

1)在继承时,构造方法不能被继承

2)通过子类创建对象时,要调用子类的构造方法,在子类构造方法执行之前会先执行父类的构造方法

原因:子类会继承父类中的数据,可能会使用父类的数据,所以子类初始化前,一定要先完成父类数据的初始化

3)默认情况下,子类构造方法会调用父类的无参构造,如果父类没有无参构造系统编译报错

4)在子类的构造方法中,可以使用 super(...)来显示的指定调用父类的哪个构造方法(...可以没有内容——无参)

5) super()必须作为子类构造方法的第一条语句

6)子类构造方法中也可以使用this()来调用其他的构造方法

7)在子类的构造方法中不能同时出现this()和 super()

4.继承中的例子题

 

JavaSE小笔记--09继承_第1张图片

解析:

JavaSE小笔记--09继承_第2张图片

5.方法的重写

A.为什么需要进行方法重写??

当子类从父类继承的方法,不能满足子类需求时,可以进行方法重写

B.重写规则:

(1)子类方法的签名(方法名和方法参数列表)必须和父类方法签名一致

(2)如果方法的返回值类型不是引用类型,子类方法的返回值类型和父类方法返回值类型一致

如果方法的返回值类型是引用类型,子类方法的返回值类型可以是父类方法返回值类型的子类

(3)子类方法的访问权限可以比父类方法的访问权限更宽泛

如果父类方法是public,子类方法只能使用public修饰

如果父类方法是 protected,子类方法可以使用 protected/public修饰

如果父类方法是默认的,没有访问权限修饰符,如果子类和父类在同一个包中,子类方法可以默认/ protected

如果父类方法是默认的,没有访问权限修饰符,如果子类和父类不在同一个包中,不能重写

如果父类方法是私有的,不能重写

(4)如果父类有异常抛出,子类重写的方法可以抛出父类异常或者父类异常的子异常

C.可以使用注解@ override来验证重写是否正确

注意:静态只能覆盖静态,其实不算重写,多态时候详解

6.方法重写的补充

override和overload的区别?overload能改变返回值类型吗?

overload可以改变返回值类型,只看参数列表

方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的

方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关

子类对象调用方法的时候,先找子类本身,再找父类。

你可能感兴趣的:(javaSE)