Javase继承

          在面向对象中类和类可以存在继承关系。即将若干个类中相同的内容(变量,函数)进行提取,把提取出来的内容放到一个类里面,这个类称为父类,其他几个被抽取的类成为子类。子类与父类之间的关系就是继承关系。一个子类只能有一个父类。在继承的时候子类和父类之间必须符合现实生活中的定义。子类从逻辑上而言应该是父类中的一种从属关系,不能因为代码的重复而忽略逻辑。

在java中有许多体系,例如:

Number体系---数字家族

Integer

Double

Long

在java中也存在继承,并且java是一种典型的单继承语言。即一个类最多只能有一个父类,不能有多个父类。

【子父类中成员变量的特点】

子类对象在创建的时候,堆内存中对象的空间里

(1)先对子类对象的成员变量进行创建并默认初始化

(2)再对父类的成员变量进行创建并默认初始化-在对象空间中的super空间里

(3)对应子类的构造函数进栈-执行显示初始化(子类父类的成员变量都显示初始化)

当调用子类对象的变量son.num时

寻找的过程为:子类成员变量 -----子类的静态变量------父类成员变量

在子类成员函数中调用变量时

寻找过程为:函数内部局部变量----子类成员变量----子类的静态变量---父类成员变量

如果前面有super修饰的话,就直接去父类空间找。

【子父类中构造函数的特点】

子类的构造函数调用的时候,父类的构造函数也执行了,并且在子类构造函数之前,

         因为子类的构造函数中,如果第一句不是this(),那么就是super()

super()默认调用的是父类的无参构造函数,但是在执行父类构造函数的时候并没有

创建父类对象,其目的就是为了给子类即将继承的数据进行初始化(显示初始化--针对初始化)

关于this()和super()

子类的构造函数最终都需要先调用父类的构造函数

(1)子类构造函数第一句是super()那么直接调用父类的构造函数

(2)子类构造函数第一句是this()----那么还是调用父类的构造函数。

即子类所有构造函数的第一行都有一条隐身的语句super():

1、父类有空参构造函数:没有有参构造时,系统默认给出了,或者有有参构造并

且也给出了空参构造,此时子类自动调用父类构造函数

2、如果父类没有空参构造函数:有有参构造函数但是并没有空参构造时,子类在构

造函数第一句又会默认调用父类的空参构造,即调用隐身的super(),此时会编译

出错。在手动写出空参构造时,就能解决。

【子父类中成员函数的特点】

子父类中成员函数的特点和子父类中成员函数的调用形式很像

如果父类没有,子类有则调用子类的

如果父类有,子类没有则调用父类的

如果父类有,子类也有,则调用子类的

【子父类中静态变量的特点】

静态变量的特点同成员变量

父类有,子类无 调用的就是父类的

父类无,子类有 调用的是子类的

父类有,子类有,调用的是子类的

1、Java如何实现继承:extends关键字。

public class Son extends Father{

    //son继承father

}

2、继承的功能:减少代码的重复,增加代码的复用度。

注意:private修饰的方法或者属性无法被子类继承。

    protected修饰的方法或者属性就是用来给子类继承的。

3、方法重写(覆盖):

重写(OverWrite)覆盖(OverRide):发生在继承中,指的是子类在继承父类

的方法后,该方法无法满足子类使用,所以在子类中重写该方法,以达到满足

子类使用的目的。

在子类中重写父类的方法时有以下注意点:

1、权限修饰符相比于父类的方法,只能扩大或者相等,不能缩小。

2、返回值类型不能发生变化

3、函数名称与父类的函数名称一致

4、参数列表必须保持一致                               

4、注解(annotation):

JDK5.0提供的新特性,利用反射技术,可以很轻松使用标注属性、方法、类等。

从而扩展功能。

注解一:@Override(表示重写方法)

注解二:@Deprecated(表示过时警告)

注解三:@SuppressWarnings(压制警告)

public class Son extends Father{

    @Override//注解,意思是say函数为重写方法

    protected void say(){

    System.out.println("我宣布一个事");

    }

5、super关键字:

super在java中是一个指针,类似于this指针。

this指针会指向创建的每一个对象

super指针指向父类

6、对象的创建流程:

(1)使用java命令将源码(.java)进行编译,生成字节码(.class)文件

(2)javac执行字节码文件

(3)将字节码文件加载进虚拟机(JVM),静态方法区开始加载静态资源

(4)JVM从静态方法区读取主函数,并加载进栈(执行栈被创建了出来)

(5)main函数开始执行创建对象的代码Son son = new Son();

(6)在堆内存中开辟对象的内存空间,并分配地址

(7)创建成员变量并进行默认初始化

(8)子类构造函数从非静态方法区加载进栈开始执行

(9)第一句先执行父类的构造函数

(10)父类构造函数执行,为子类继承到的成员变量进行初始化(对象内存空

间里的父类空间)

(11)父类构造函数弹栈完成

(12)子类构造函数继续执行,此时先对成员变量进行显式初始化

(13)再执行子类构造函数的内容,进行针对性初始化

(14)执行完成,子类构造函数弹栈,将对象的内存空间地址赋予相应的引

用变量

子类对象在创建的时候子父类中成员变量的特点:

堆内存中对象的空间里

(1)先对子类对象的成员变量进行创建并默认初始化

(2)再对父类的成员变量进行创建并默认初始化-在对象空间中的super空间

(3)对应子类的构造函数进栈-执行显示初始化(子类父类的成员变量都显

示初始化)

通过子类对象调用变量 son.num

寻找过程:子类成员变量----子类的静态变量----父类成员变量

在子类成员函数中调用变量

寻找过程:函数内部局部变量----子类成员变量----子类的静态变量---父类成员变量

如果有super直接去父类空间找

关于this()和super():子类的构造函数最终都需要先调用父类的构造函数

(1)子类构造函数  第一句是super()那么直接调用父类的构造函数

(2)子类构造函数  第一句是this()那么调用this(),一直往下,子类的最终被调用

的构造函数不能回调  遇到第一句是super()的构造函数,那么就调用父类的构造

函数。

this():调用本类中的无参构造函数

super():调用父类中的一个无参构造函数

7、instanceof关键字:

instance:实例

instanceof:判断是否是实例

8、字符串格式化的方法:

format():静态方法

9、final关键字:

final:最终、最后,可以修饰基本数据类型,引用数据类型,函数,类。

(1)被final修饰的变量,就不能被重新赋值了,就成为了一个常量

定义常量:static  final  double PI = 3.14 ;//常量的每个字母都要大写

定义常量只能定义在类里面,不能定义在方法里面。

10、内部类:定义在一个类内部的类,叫做内部类。

class Xiumao{

    class Lihuamao{

    }

}

(1)内部类可以看成外部类的一个成员。

(2)内部类可以直接访问包含它的类的私有成员。

11、static关键字静态导包:

如果需要使用一个静态方法,该方法需要导包,可以使用静态导包的方法。如果

静态导包成功,那么就可以直接使用静态方法的名称。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值