您的位置:首页 > 其它

Unit06 - 抽象类、接口和内部类(下) 、 面向对象汇总

2016-12-15 22:39 316 查看

    Unit06 - 抽象类、接口和内部类(下) 、 面向对象汇总    

1.多态:
1)意义:
1.1)同一类型的引用指向不同的对象时,有不同的实现
行为的多态:cut()、run()、study()
1.2)同一个对象被造型为不同的类型时,有不同的功能
对象的多态:我、你、水
2)向上造型:
2.1)父类型的引用指向子类的对象
2.2)能造型成为的类型: 父类、所实现的接口
2.3)能点出来什么,看引用的类型
3)强制类型转换,成功的条件只有两种:
3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口
4)若不符合如上两个条件,则ClassCastException类型转换异常
建议在强转之前先通过instanceof来判断引用的对象是否是某种类型

2.成员内部类:应用率比较低
1)类中套类,外面的称为外部类,里面的称为内部类
2)内部类通常只服务于外部类,对外不具备可见性
3)内部类通常在外部类中创建
4)内部类中可以直接访问外部类的成员(包括私有的)
内部类中有个隐式的引用指向了创建它的外部类对象
外部类名.this

3.匿名内部类:
1)若想创建一个类(子类)的对象,并且该对象只被创建一次,
此时该类不必命名,称之为匿名内部类
2)匿名内部类中访问外面的数据,该数据必须是final的

4.面向对象三大特征:
1)封装:
1.1)类:封装的是对象的属性和行为
1.2)方法:封装的是具体的业务逻辑功能实现
1.3)访问控制修饰符:封装的是访问的权限
2)继承:
2.1)作用:代码的复用
2.2)通过extends来继承
2.3)子继承父后,具有:父+子
2.4)单一继承、传递性
2.5)继承类、实现接口
3)多态:
3.1)意义:行为的多态、对象的多态
3.2)向上造型、强制类型转换、instanceof
3.3)表现形式:
3.3.1)重写
3.3.2)重载

程序设计规则:
1)将公共的属性和行为抽象到父类中
2)所有子类行为都一样------普通方法
所有子类行为不一样------抽象方法
3)符合既是也是原则时,使用接口
部分子类共有,设计到接口中
接口是对继承单根性的扩展

println()-------是多态的(根据参数而多态)

面试题:
问:内部类有独立的.class吗?
答:有

成员内部类的演示

InnerClassDemo.java

package oo.day06;
//成员内部类的演示
public class InnerClassDemo {
public static void main(String[] args) {
Mama a = new Mama();
//Baby b = new Baby(); //编译错误
}
}

class Mama{
private String name;
Baby createBaby(){
return new Baby();
}
class Baby{
void showMamaName(){
System.out.println(name);
System.out.println(Mama.this.name);
//System.out.println(this.name); //编译错误
}
}
}


多态演示

UpDemo.java

package oo.day06;
//多态的演示
public class UpDemo {
public static void main(String[] args) {
Aoo o1 = new Boo(); //向上造型
Boo o2 = (Boo)o1; //o1指向的对象就是Boo类型
Inter1 o3 = (Inter1)o1; //o1指向的对象实现了Inter1接口
//Coo o4 = (Coo)o1; //ClassCastException类型转换异常
if(o1 instanceof Coo){ //false
Coo o5 = (Coo)o1;
}
System.out.println("over");
}
}

interface Inter1{ }
class Aoo{ }
class Boo extends Aoo implements Inter1{ }
class Coo extends Aoo{ }


匿名内部类的演示

NstInnerClassDemo.java

package oo.day06;
//匿名内部类的演示
public class NstInnerClassDemo {
public static void main(String[] args) {
//1.创建了Inter2的一个子类,没有名字
//2.为该子类创建了一个对象,叫o1
//3.大括号中的为子类的类体
Inter2 o1 = new Inter2(){

};

//1.创建了Inter2的一个子类,没有名字
//2.为该子类创建了一个对象,叫o2
//3.大括号中的为子类的类体
Inter2 o2 = new Inter2(){

};

final int num = 5;
Inter3 o3 = new Inter3(){
public void run(){
System.out.println("abc");
System.out.println(num);
}
};
o3.run();

}
}

interface Inter3{
public void run();
}

interface Inter2{
}


银联卡系统V-1.1.1

UnionPay.java

package oo.day06;
//银联卡系统
public class UnionPayTest {
public static void main(String[] args) {

ABCATM atm = new ABCATM(); //atm机对象
UnionPay card = new ICBCImpl(); //银联卡--工行卡
atm.insertCard(card); //插卡
atm.payTelBill(); //支付电话费

}
}
class ABCATM{ //农行ATM机
private UnionPay card; //银联卡
public void insertCard(UnionPay card){ //插卡
this.card = card;
}

public void payTelBill(){ //支付电话费
if(card instanceof ABC){ //农行卡
ABC abcCard = (ABC)card; //强转为农行卡
abcCard.payTelBill("12345678945", 500); //支付电话费
}else{
System.out.println("不是农行卡,不能支付电话费");
}
}

public void getBalance(){ //查询余额
System.out.println("当前余额为:"+card.getBalance());
}
}

interface UnionPay{ //银联接口
public double getBalance(); //查询余额
public boolean drawMoney(double number); //取款
public boolean checkPwd(String input); //检查密码
}
interface ICBC extends UnionPay{ //工行接口
public void payOnline(double number); //在线支付
}
interface ABC extends UnionPay{ //农行接口
public boolean payTelBill(String phoneNum,double sum); //支付电话费
}

class ICBCImpl implements ICBC{ //工行卡
public double getBalance(){return 0.0;}
public boolean drawMoney(double number){return false;}
public boolean checkPwd(String input){return false;}
public void payOnline(double number){}
}
class ABCImpl implements ABC{ //农行卡
public double getBalance(){return 0.0;}
public boolean drawMoney(double number){return false;}
public boolean checkPwd(String input){return false;}
public boolean payTelBill(String phoneNum,double sum){
System.out.println("支付电话费成功");
return true;
}
}


UnionPay.java V1.1.1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐