黑马程序员技术交流社区
标题: 【绝对自己总结】Java基础复习——第四章 继承(3) [打印本页]
作者: li6232876 时间: 2016-5-19 08:40
标题: 【绝对自己总结】Java基础复习——第四章 继承(3)
本帖最后由 li6232876 于 2016-5-19 08:42 编辑
4.10 多态
(1)前提:
① 有继承关系;② 有方法重写;③ 要有父类引用指向子类对象。
(2)多态中的成员访问特点?
① 成员变量:编译看左边,运行看左边;
② 成员方法:编译看左边,运行看右边;→动态绑定
③ 静态方法:编译看左边,运行看左边;→静态绑定
简单记:只有成员方法是编译看左边,运行看左边。
(3)多态的好处和弊端?
① 好处:
提高了代码的维护性(继承保证);
提高了代码的扩展性(由多态保证)。
② 弊端:不能使用子类的特有属性和行为。
4.11 内部类
(1)内部类的访问特点?
① 内部类可以直接访问外部类的成员,包括私有;
② 外部类要访问内部类成员,必须创建对象:
Outer.Inner in = new Outer().new Inner()
外部类·内部类 对象名 = 外部类对象·内部类对象
(2)成员内部类被静态修饰后的访问方式是?
答: Outer.Inner in = new Outer.Inner();
外部类·内部类 对象名 = 外部类名· 内部类对象
(3)示例:要求使用已知的变量,在控制台输出30,20,10。
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(?); // num
System.out.println(??); //this.num
System.out.println(???); //Outer.this.num
}
}
}
class InnerClassTest {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
(4)局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?答: 因为当调用这个方法时,局部变量如果没有final修饰,他的生命周期和方法的一样长,当方法弹栈,这个局部变量也就会消失;如果用final修饰,会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也能继续使用.
(5)匿名内部类
① 格式: new 类名或接口名 ( ) { 方法重写 }
本质: 是一个集成了该类或者实现了该接口的子类匿名对象;
② 案例演示:
//按照要求,补齐代码,要求在控制台输出”HelloWorld”
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
interface Inter { void show(); }
class Outer { //补齐代码}
解答:
class Outer {
public static Inter method () {
returnnew Inter () {
public void show () {// 重写Inter接口中的方法
System.out.println("HelloWorld");
}
}; //蓝色部分new Inter() {} 相当于Inter的一个子类对象。
}
}
解析:
(1)Outer.method() 是 ”类名.方法名” 调用; 说明method()是静态方法static;
(2)Outer.method().show(),说明show()前面是一个对象;而有show()方法的只有Inter方法, 所以method()方法中返回值类型应该是Inter ;所以为public static Inter method () {} ;
(3)Inter()方法时一个指针(抽象类),所以method()方法中return的应该是Inter()的一个子类,连带重写Inter()中的抽象方法;故为return public void show () { System.out.println("HelloWorld"); } ;
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |