Unit06 - 抽象类、接口和内部类(下) 、 面向对象汇总
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 - 抽象类、接口和内部类(下) 、 面向对象汇总的更多相关文章
- Java抽象类接口、内部类题库
一. 选择题 1. Person类和Test类的代码如下所示,则代码中的错误语句是( C ).(选择一项) public class Person { public String nam ...
- “全栈2019”Java第一百零六章:匿名内部类与抽象类接口注意事项
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java程序设计8——抽象类、接口与内部类
1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由 ...
- 面向对象 继承 抽象类 接口 static 权限修饰符
Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...
- Unit05 - 抽象类、接口和内部类(上)
Unit05 - 抽象类.接口和内部类(上) 1.static final常量: 1)必须声明同时初始化 2)通过类名来访问,不能被改变 3)建议:常量名所有字母都大写(多个单词间用_) 4) ...
- 【Java基础】【09面向对象_多态&抽象类&接口】
09.01_面向对象(多态的概述及其代码体现) A:多态(polymorphic)概述 事物存在的多种形态 B:多态前提 a:要有继承关系. b:要有方法重写. c:要有父类引用指向子类对象. C:案 ...
- 面向对象的理解 抽象类&接口
一.关于面向对象 1.什么是面向对象 在解释面向对象之前,先说说面向过程.学过C的同学都知道,C就是面向过程的一种语言.那什么是面向过程呢?比方说组装主机,对于面向过程,需要从0开始.买cpu ...
- Java入门教程十(抽象类接口内部类匿名类)
抽象类(abstract) 一个类只定义了一个为所有子类共享的一般形式,至于细节则交给每一个子类去实现,这种类没有任何具体的实例,只具有一些抽象的概念,那么这样的类称为抽象类. 在面向对象领域,抽象类 ...
- python面向对象 : 抽象类(接口类),多态,封装(私有制封装)
一. 抽象类(接口类) 与java一样, python也有抽象类的概念但是同样需要借助模块实现,抽象类是一个特殊的类, 它的特殊之处在于只能被继承, 不能被实例化. 从设计角度去看, 如果类是从现实对 ...
随机推荐
- How to crack gbooks
Damn cnblogs, no auto saving set by default, even worse than csdn, can't believe it, lost half an ho ...
- windows下cmd时复制dos中的内容 错误信息等
16:28 2015/11/23小发现 windows下cmd时复制dos中的内容,错误信息等:鼠标右键选择标记,然后ctrl c 即可.
- HDU 4751 Divide Groups
题目链接 比赛时候,建图建错了.大体算法想到了,不过很多细节都没想好. #include <cstdio> #include <cstring> #include <cm ...
- BZOJ2097[Usaco2010 Dec] 奶牛健美操
我猜我这样继续做水题会狗带 和模拟赛的题很像,贪心搞一下. #include<bits/stdc++.h> using namespace std; int read(){ ,f=;cha ...
- OpenSceneGraph学习笔记
VirtualPlanetBuilder编译方法 转自:http://www.boyunjian.com/do/article/snapshot.do?uid=7327932418831703800 ...
- 在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke
今天关闭一个窗体,报出这样的一个错误"在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke.",这个不用多想,肯定是那个地方没有释放掉.既然碰到这个问题, ...
- 既然nodejs是单线程的,那么它怎么处理多请求高并发的?
单线程解决高并发的思路就是采用非阻塞,异步编程的思想.简单概括就是当遇到非常耗时的IO操作时,采用非阻塞的方式,继续执行后面的代码,并且进入事件循环,当IO操作完成时,程序会被通知IO操作已经完成.主 ...
- 用GruntJS合并、压缩CSS资源文件
合并.压缩CSS资源文件用到了grunt-contrib-concat.grunt-css插件,自己npm就可以了,下面直接呈上package.json.Gruntfile.js代码 package. ...
- Ohana Cleans Up
Ohana Cleans Up Description Ohana Matsumae is trying to clean a room, which is divided up into an n ...
- linux 有趣的命令
input: echo ' > ..XXX. .XXX.. > .XXXXY.TXXXX. > XXXXXYXTXXXXX > .VXXVYXTVXXX. > `.TYX ...