20170815 - 今日技能封装 - A
1 子类继承父类,父类中有静态方法,子类会继承父类的静态方法吗?
不会,静态方法只属于类,只能通过类名.方法访问。
2 如果不用构造方法,应如何赋值?
新建对象后,对象.属性赋值
3 接口和抽象类的区别是?
4 程序设计规则是?
① 将共有的属性及行为抽象到父类中。
② 相同行为设计为普通方法,不同行为设计为抽象方法。
③ 将部分子类共有的方法抽象到接口中(因为一个类只能继承一个父类)
(符合 既是也是 的对象,用接口——“兰花既是植物也是花”)
5 如何理解接口?
接口是对继承的补充,是用于间接实现多继承。
6 实现接口的类,可以像继承抽象类一样进行多对象讨论吗?
(多对象讨论的基础,父类有共同的方法,可以用于子赋父的对象访问)
可以,接口内方法皆为抽象方法(不写而已)
7 对象→父类→抽象类→接口的理解。
抽取对象属性及行为
父类自然抽象化
抽象类不足以描述对象,增加接口以实现多继承。
8 什么是多态?
行为的多态
同一个类型的引用(父类)指向不同类型的对象相同的方法会有不同的行为。
cut teach
对象的多态
同一个类型的对象(子类)指向不同类型的引用具有不同的方法。(子赋父,父引用只能点出父类
的属性和方法)
实现讲师接口,我作为讲师(赋给讲师型引用)
9 一个类可以向上造型(自动类型转换)的类有?
实现的类,父类。
10 引用类型强制类型转换的条件是?
①被转换对象的引用指向的对象就是转换的类型
——(针对继承,注意单一性,所以有必然性)
简化,发生向上造型的对象(大对象)重新赋值给子类对象(小对象)需要强转成小对象
①实现了接口的对象(子类可能还继承了其他类,所以为大对象)赋值给实现接口对象(小对象)
Aoo extends xx implements Inter
o1 = new Aoo()
Inter i1 = (Inter)o1//将一个Aoo对象转换为接口类型的对象。
——(针对实现)
大到小,必须强转
Boo o1 = o2; 错误
Boo o1 = (Aoo)o2
11 简述各部分的流程
public class MultiTypeDemo {
public static void main(String[] args) {
Aoo o1 = new Boo();
Boo o2 = (Boo)o1;
Inter1 o3 = (Inter1)o1;
//Coo o4 = (Coo)o1;
if(o1 instanceof Coo){
Coo o5 = (Coo)o1;
}
//思维薄弱点:
① o1虽然是Aoo对象,但实际是Boo型对象(可以访问Boo的重写方法),
所以不能强转为Coo对象。
用instenceof验证o1是否属于Aoo的实例是通过的,实际上便是inter1的子类
② o1实现了inter1→实现了某个接口实际便是其实例
a,用instenceof验证o1是否属于inter的实例是通过的,实际上便是inter1的实例
b,可以被强转为inter类型对象(虽然是接口)
③ o1分别是Aoo,Boo,Inter1的实例。
感悟:
o1实际上是三个类型的实例,在传参时,看引用类型调用方法,在调用方法时,
则看o1指向的子类对象调用重写的方法。
}
}
interface Inter1{
}
class Aoo{
}
class Boo extends Aoo implements Inter1{
}
class Coo extends Aoo{
}
Aoo o1 = new Boo();//向上造型
//Boo o2 = o1;
Boo o2 = (Boo)o1;//Aoo类型o1到Boo类型o2,小到大,需要强制转换
Inter1 o3 = (Inter1)o1;//Aoo类型o1到Inter1型o3,小到大,需要强制转换
//Coo o4 = (Coo)o1;
//o1为子赋父的对象,但其子为Boo,虽然Coo也继承了Aoo是子
//但Aoo实际上是Boo类型的对象,所以无法转换。
(就像是女人赋人,人不能等于男人,虽然男人是人的子类)
if(o1 instanceof Coo){
Coo o5 = (Coo)o1;//Boo型o1到Coo型o5,无任何关系,不使用instanceof则报错
//ClassCastExce..
12 如何找出类属性?
根据行为找出属性。
13 ATM机案例,再将银联接口作为类属性时,一时不太确定,不是具体的卡的类,而是一个接口类,
实际上是可以的,因为对象是实现它的类。
14 向上造型后的对象(A是B的子类,C也是,现在对象为B型),可否作为被强转的值(B)赋给非原本子类的其他子类(C)
不,B现在实际上是A类,和C类完全不同。
15 instanceof验证的是?
判断前面的对象是否后面的实例。
15 内部类有多少种
成员内部类,匿名内部类。
16 其他类可以获取成员内部类的属性吗?
不行
17 成员内部类服务于什么?
外部类
18 成员内部类可以访问什么?
外部类的所有成员变量及方法。
19 成员内部类只能在哪里创建?
外部
20 outer是?inner是?
成员外部类
21 只调用一次(创建一次)的对象,用什么特性?
匿名内部类
22 如何判断匿名内部类?
new 对象后跟大括号
23 匿名内部类的创建过程是?
1 创建一个Inter3的子类(实现)
2 创建一个子类的匿名对象
3 大括号内为匿名内部类的类体
24 匿名内部类如何访问外部变量?
只能访问final变量
25 匿名内部类有自己的class文件吗?
有
26 匿名内部类匿名的是?
内部的子类。
27 何时需要创造匿名内部类?匿名内部类适用于什么类?
仅需创建一次的类——如某个接口类的实现类对象。
28 面向对象的三大特征是?
封装,
类:封装的是类的属性和行为。
方法:封装的是具体的业务逻辑实现
访问控制修饰符:封装的是访问的权限
继承,
作用:代码的复用
父类(基类):共有的属性和方法
子类(派生类):特有的属性和方法
子继承父后,具有父的特征
传递性,单一继承,多接口实现多继承
多态,
分为:行为的多态(cut)对象的多态(人→女男)
向上造型,强制类型转换,instanceof判断
多态的表现形式:
重写,根据对象来多态
重载,根据参数来多态
29 匿名内部类示例,NstInnerDemo
public class NstInnerDemo {
public static void main(String[] args) {
//1
//2
//3
Inter2 o2 = new Inter2(){
};
final int num = 5;
//1 创建一个Inter3的子类(实现)
//2 创建一个子类的匿名对象
//3 大括号内为匿名内部类的类体
Inter3 o3 = new Inter3(){
public void show(){
System.out.println("showshow");
System.out.println(num);
}
};
o3.show();
}
}
interface Inter2{
}
interface Inter3{
public void show();
}
30 如何调用匿名内部类的方法及属性?
使用外部类的名字调用。
31 建立匿名内部类实例复盘
① 类体内方法必须加public
② 若外部类为接口则必须重写
32 实现某个类相当于什么?
继承了某个类。
33 实现了实现类的对象是否是接口类的对象?
是,继承具有传递性。
思维薄弱点记录
ABCImpl abccard = (ABCImpl)card;
//思维薄弱点:不可自重新赋值;不同的类方法名可相同
//卡还是那张卡,只是多态的表现,并不是新建了一张(堆中的对象只有一个)
public void showBalance(){
System.out.println("当前余额为"+card.getBalance());
}
//思维薄弱点1,没有想到是直接用卡的方法获取余额,还在想要定义一个获取余额的方法
//没有理解透彻面向对象编程——当传入的是对象时,便可以直接调用对象内的属性方法
//判断插入卡类型
//取款——询问→获取金额→调用卡内方法→最后对返回结果做一个反馈
//思维薄弱点:没有想去最后对返回结果做一个反馈
System.out.println("请输入欲提现的金额");
Scanner scan = new Scanner(System.in);
double input = scan.nextDouble();
if(card.drawMoney(input)){
System.out.println("取现成功");
}else{
System.out.println("取现失败");
}