【Java】之继承总结

1.静态和非静态的区别。说一下内存。
静态:用static修饰的成员变量,被所有实例化的对象共享其值;
内存:
    静态成员变量存放的地址在方法区的常量池中,其中方法区、堆的值会被共享,其生命周期随着类的加载完而结束
    非静态的成员变量地址在堆中,因为它是实例化对象的一部分。
    注解下所有的局部引用地址都存放在栈中。


2.成员变量和静态变量的区别?
    一般来讲我们说静态变量属于类,而成员变量属于实例化对象中的
    静态的变量可以称为静态的成员变量,只不过这个属性的值在实例化对象之前已经初始化了,其值被所有的实例化对象共享。

3.静态的特点以及注意事项?
    修饰变量:其静态变量,被所有实例化的对象共享
        修饰方法:方法本来存放的地址就在方法区,加了静态static修饰之后再内存中的地址是没有变化的,唯一的一个区别是,非        的方法需要通过关键字new来实例化对象,开辟一个单独的内存空间。而静态的方法需要调用方法的时候只需要通过类名和点的方式进行获取引用即可。
注意事项:
    1、在成员变量中泛滥成灾的用静态的,就会导致实例化对象的时候所有的属性的值都是共享的,就不会存在面向对象的思想了,同时其生命周期过长
    2、static的值不容易控制。
    3、过多的使用静态会导致在加载类的时候对内存造成很大的压力。

4.什么时候使用静态?
    类的实例化成员有一个单一固定值的属性,这时候需要使用静态
    为了在运行加载优化内存时
    

5.继承的好处?
    1、描述类与类之间的关系
    2、降低类与类之间的重复代码
    3、降低对象与对象之间的代码重复使用静态变量

6.java改良多继承的原因?
java的面向对象本质是多态,能更好的基于父类的基础进行更好的拓展,减少类与类之间的重复代码

7.当使用一个已存在的继承体系时,该如何更快应用 
    使用super调用基类中的特性
    使用this调用本类中的属性
    
8.什么时候用继承?
当 A is a B或者A has a B的时候用

9.super和this的特点?
相同点:
只能放在构造器的第一行
不能同时使用super()、this()
不同点:
this指的是当前的类
super指的是调用父类的特性
super.para    访问的是子类从超类继承过来的属性
this.para     访问的是子类中自己定义的同名属性
super.func()..访问的是父类的方法
super()       访问的是父类的构造函数

10.覆盖的特点,何时应用,注意事项?
覆盖在java中的术语是重写
这里说明下,在没有显示支出继承的状态下,默认都是继承的Object类
1、当继承了一个父类,其父类的方法无法满足子类需要时
2、继承一个抽象类,必须重写抽象类中的方法
3、但实现一个接口,必须重写接口中发方法
注意:
    重写方法:方法名必须一致
    必须保证参数类型,参数个数和返回类型
    (备注下当返回类型是对象类型是,重写方法返回类型可以是对象的子类类型)
    
11.子类的实例化过程?为什么是这样的实例化过程?
子类实例化的过程是:
    基类先实例化,再实例化父类,其次基类(这里举例继承三层,如有更多的继承就是从基类开始一直实例化到子类)
从两个方面来阐述说明:
    反面:如果先执行子类的实例化会出现的问题是,程序找不到你调用的父类所有特性。
    正面:在实例化的时候基类不清楚子类的任何信息,任何需要他完成的初始化是与子类分离的,而且他可能是完成子类初始化的先决条件,因此它必须最先执行。

12.super语句,和this语句为什么不能同时存在,super为什么要定义在第一行?
首先这是java里是这样规定的,其顺序为基类一直到到默认的object类
从执行的顺序来分析:
    super()如果子类中没有指定任何一个构造函数,那么程序会自动创建一个无参的构造函数,其构造函数里第一行会默认加上super(),因为超类无法得知出子类需要自己初始化哪些值。
    this(),调用本类的构造函数,最终还是会先调用基类的构造函数。
    super()和this()最终都会先调用基类的构造函数,如果在初始化子类的时候连续两次执行基类的构造函数不安全
    super()和this()之所以放在第一行就是为了确保基类知道子类要初始化哪些特性。
    
13.abstract 与其他修饰符的关系:
final与abstract不能共存  
    abstract修饰类就是用来被继承的,修饰方法方法就是用来被重写的
    final:修饰类代表不可以被继承,不可以被重写
static与abstract不能共存
    static:static修饰的方法可以被类名调用
    abstract:对于abstract修饰的方法没有具体的实现方法,所以不能直接调用
private与abstract不能共存
    private修饰的只能在本类使用
    abstract方法是用来被子类进行重写的

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值