第二周疑问点
-
实现类应该重写接口的所有方法嘛?
一般来说是的。jdk8以前都是默认抽象方法,必须全部重写。
jdk8后接口中的方法,可以有默认方法和静态方法,
默认方法和抽象类的具体方法一样,是为了给子类一个默认初始化。可以继承和根据需求重写。
静态方法
不能被继承,只能被接口名调用。
但是,在当前实际开发中,接口一般作为一种规范去交给子类实现。尽量不要写其他方法。
-
为啥抽象类的子类在某个方法返回,要用抽象类的引用来接收?有啥好处?
为了多态
-
抽象类的设计作用,抽象方法,是否有引导子类,必须重写一些特定方法的作用,特别是具体子类?,具体方法给子类提供一个默认实现
是的
-
局部内部类为啥不可以有权限修饰符?
看作一个局部变量,随着方法起始。不需要修饰符
-
局部内部类怎么访问外围类中的局部变量?在jvm中如何访问?
访问不受限制,但是访问的值默认加了final,因为局部内部类实例化的对象,可能比局部变量的生命周期长,且jvm在实例化局部内部类的时候,拷贝了所在方法体内的局部变量,但是为了避免,访问内部类对象修改拷贝的值后,局部变量没改变。所以直接final了。
-
内部类具体分类,异同之处。
笔记中有具体分析
-
匿名内部类有啥用?
便利了实现类调用接口的方法。表面上看,接口好像可以实例化了。 抽象类表面上好像也可以实例化了。
不用创建新的类,甚至连对象都一步创建了。
实现的接口,类,抽象类的子类。
-
父类的父类可以接受子类的对象那,Person 可以接受 new Son() 嘛 (Son extend Father)?
可以,Person相当于指向的是Son对象里面父类的父类的成员信息区。不能调用Father的成员变量,除非向下转型。
还是那句话,对于访问成员变量:编译时看左边,运行时看左边。
编译时看左边,运行时看右边。
-
显式调用 是从方法区中的父类类加载中调用的???
疑问来源:为什么父类引用子类对象,父类引用调用子类重写的方法,执行的确实是子类重写后的方法,但super调用父类被重写的方法,仍然调用的是父类的方法。疑问:重写不是覆盖了对象中的父类成员信息区嘛?
-
实现类多继承接口,多个接口中有重复的方法会怎样?
报错
-
为什么成员位置创建的对象掉用不了方法,和成员变量。
首先!不要在成员位置创建自己的对象。否则在别的地方再用这个类创建对象时,就会循环创建这个成员对象
其次:创建其他类的对象,后调用该对象的成员变量也会报错,再就是这种实例化方法太单一。不建议