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

Unit06 - 抽象类、接口和内部类(下) 、 面向对象汇总的更多相关文章

  1. Java抽象类接口、内部类题库

    一.    选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是(  C  ).(选择一项)   public class Person { public String nam ...

  2. “全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. Java程序设计8——抽象类、接口与内部类

    1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由 ...

  4. 面向对象 继承 抽象类 接口 static 权限修饰符

    Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...

  5. Unit05 - 抽象类、接口和内部类(上)

    Unit05 - 抽象类.接口和内部类(上) 1.static final常量:  1)必须声明同时初始化  2)通过类名来访问,不能被改变  3)建议:常量名所有字母都大写(多个单词间用_)  4) ...

  6. 【Java基础】【09面向对象_多态&抽象类&接口】

    09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...

  7. 面向对象的理解 抽象类&接口

    一.关于面向对象 1.什么是面向对象     在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu ...

  8. Java入门教程十(抽象类接口内部类匿名类)

    抽象类(abstract) 一个类只定义了一个为所有子类共享的一般形式,至于细节则交给每一个子类去实现,这种类没有任何具体的实例,只具有一些抽象的概念,那么这样的类称为抽象类. 在面向对象领域,抽象类 ...

  9. python面向对象 : 抽象类(接口类),多态,封装(私有制封装)

    一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...

随机推荐

  1. 福建红色文化VR/AR实体体验馆正式启用

    (12月13日),福建红色文化网上展示馆上线暨福建红色文化VR/AR实体体验馆启动仪式在福建省革命历史纪念馆举行.省委常委.宣传部长高翔出席仪式并宣布启动上线. 福建红色文化网上展示馆和VR/AR实体 ...

  2. Android 情景模式设置

    情景模式的设置大家应当相当熟悉了,但是在Android中如何通过自己的程序进行情景模式的设置呢,情景模式分为多种多种,即可以使用系统自带的,也可 以使用自定义的,但是在开发某些程序时,可能需要在程序中 ...

  3. 20145308刘昊阳 《Java程序设计》第3周学习总结

    20145308刘昊阳 <Java程序设计>第3周学习总结 教材学习内容总结 第四章 认识对象 要产生对象必须先定义类,类是对象的设计图,对象是类的实例 类是从少数实例推广到大量相似实例的 ...

  4. 【BZOJ1270】1270: [BeijingWc2008]雷涛的小猫 DP

    Description   Input Output Sample Input Sample Output 8 HINT Source 唉这么蠢的Dp没一下子看出来,Dp真是太弱了啦. #includ ...

  5. 深入浅出 - Android系统移植与平台开发(三)- 编译并运行Android4.0模拟器

    作者:唐老师,华清远见嵌入式学院讲师. 1.   编译Android模拟器 在Ubuntu下,我们可以在源码里编译出自己的模拟器及SDK等编译工具,当然这个和在windows里下载的看起来没有什么区别 ...

  6. Cortex-M0(NXP LPC11C14)启动代码分析

    作者:刘老师,华清远见嵌入式学院讲师. 启动代码的一般作用 1.堆和栈的初始化: 2.向量表定义: 3.地址重映射及中断向量表的转移: 4.初始化有特殊要求的断口: 5.处理器模式: 6.进入C应用程 ...

  7. centos 7 搭建本地yum仓库

    首先需要创建一个目录 mkdir /1   #在根目录下创建一个名字为1的目录 将光盘挂载到创建的这个目录 mount /dev/cdrom /1 yum命令配置文件在/etc/yum.repos.d ...

  8. Func<T>与Action<T>委托泛型介绍:转

    .Net 3.5之后,微软推出了Func<T>与Action<T>泛型委托.进一步简化了委托的定义. Action<T>委托主要的表现形式如下: public de ...

  9. 复制 VS 复用 -04

    (续上篇)         小菜:“我明白了,他说用任意一种面向对象语言实现,那意思就是要用面向对象的编程方法去实现,对吗?OK,这个我学过,只不过当时我没想到而已.” 大鸟:“所有编程初学者都会有这 ...

  10. css解决select下拉表单option高度的办法

    css在给select下拉表单设置样式如边框时可以轻松搞定,而我们在不喜欢其默认的下拉箭头的样式时试图通过background:url(图片路径)来修改之,则往往会出现浏览器的兼容性问题,在网上查了好 ...