黑马程序员 Java基础难点总结day2

来源:互联网 发布:军人网络保密准则 编辑:程序博客网 时间:2024/05/29 19:10

 

------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

11.子父类的构造函数

    1、父类中如果没有空参构造函数,那么子类构造函数必须用this(子类中的构造函数)或者super(父类中的构造函数)指定要访问的构造函数。

    2、 如果子类构造函数,用this访问了子类中的另一个构造函数,则默认super()消失。因为this和super都必须存在构造函数的第一行。所以只有一个,但是必须保证有其他构造函数,访问父类构造函数。

    3、super必须要在第一行,因为必须要先初始化父类。

12、对象实例化过程,以Person p = new Person();为例:
    1. JVM会读取指定的路径下的Person.class文件,并加载进内存,并会先加载Person的父类(如果有直接的父类的情况下)。
    2. 在内存中开辟空间,并分配地址。
    3. 并在对象空间中,对对象的属性进行默认初始化。
    4. 调用对应的构造函数进行初始化。
    5. 在构造函数中,第一行会先到调用父类中构造函数进行初始化。
    6. 父类初始化完毕后,再对子类的属性进行显示初始化。
    7. 再进行子类构造函数的特定初始化。
    8. 初始化完毕后,将地址值赋值给引用变量。

13.匿名对象的调用

    当方法只需要调用一次时,就可以用匿名对象调用,调用完成后就被垃圾回收器回收,提高了效率。

例如:student s = new student();s.show();这里是学生对象调show方法。

匿名对象调用为:new student().show();

这里的new student()可以理解为一个新建的对象,对象调show()方法。

14.抽象类和接口的区别

    抽象类:需要继承才能创建对象,只有单继承。有抽象方法也有非抽象方法,is a关系。

    接口:需要去实现,多实现。只有抽象方法。like a关系。

16.方法重写和方法重载的区别

    方法重写:子类和父类中声明了一模一样的方法。

    方法重载:本类中出现了方法名一样,但参数列表不一样的方法,与返回值无关,就要重新加载此方法。

   重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

 

     重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

 

     至于Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

 

 

17.final修饰局部变量

    修饰基本类型时,最终值不变。修饰引用类型时,引用对象地址值不变,但要注意的是,存取的数据可以变化。

    局部内部类访问局部变量时,局部变量必须用final修饰,因为局部变量随着调用的消失,但是变量还有用。

 

18.多态的好处与弊端

    多态的好处:提高了代码的维护性(由继承保证,继承的唯一性)。

                 提高了代码的扩展性(由多态保证)。

    多态的弊端:不能使用子类特有功能,但是如果想要使用,可以由以下两种

方法:

1.    创建子类对象调用,但是太占内存,不合理。

2.    把父类的引用类型强制转换给子类,向下转型。

 

19.对象间的转型问题

    向上转型:Fu f = new Zi();

 

    向下转型:Zi z = (Zi)f;

但向下转型的前提为父类必须能转为子类。

20.权限修饰符

                 private   默认(friendly)  protected       public

 

本类                能          能            能              能

 

 

无关类                          能            能              能

 

 

不同包下子类                                  能              能

 

 

不同包下无关类                                                能

 

能代表能访问

0 0
原创粉丝点击