1、抽象类和抽象方法
abstract用来定义抽象类和抽象方法的关键字
类中如果有实现的方法也有不能实现的方法,这样的类必须定义为抽象类
不能实现的方法通常定义为抽象方法
由abstract修饰的方法为抽象方法,抽象方法只有方法定义,没有方法体,使用分号结束
一个类中,如果有抽象方法,该类必须是抽象类,定义类必须使用abstart关键字
一个抽象类,可以没有抽象方法
抽象类不能创建对象,只能由子类创建对象
设计抽象类其实就是为了设计多个子类的共性功能、
当类继承了抽象类,必须实现抽象类所有的抽象方法
如果子类也是抽象类,继承抽象类,可以不实现父类的抽象方法
abstract和final不能同时修饰一个类
package com;
/**
* 演示:定义抽象类和抽象方法*/
public class Demo01 {
public static void main(String[] args) {
}
}
//定义抽象类
abstract class Bird{
//定义抽象方法,没有方法体,使用分号结束
public abstract void eat();
public void fly(){
System.out.println("飞");
}
}
//当类继承了抽象类,必须实现抽象类所有的抽象方法
class ZmnBird extends Bird{
public void eat(){
System.out.println("啄食");
}
public void fly(){
System.out.println("林间飞翔");
}
}
//如果子类也是抽象类,继承抽象类,可以不实现父类中的抽象方法
abstract class OtherBird extends Bird{
}
抽象类的意义:
抽象类可以为多个子类提供提供一个公共的类型
可以封装子类中的重复内容(成员变量和方法)
定义抽象方法,给子类提供一个统一的方法签名
用来制定标准、规范
接口是特殊的抽象类,接口中所有的方法都是抽象方法
定义接口使用interface关键字
接口中的方法都是public abstract的方法
定义可以不使用修饰符
接口中的成员变量都是静态常量
类可以实现多个接口
类既可以继承一个父类,同时也可以实现接口
例如:class Crile /extends Object/implements Shape,Serializable{}
接口之间可以继承,而且可以多继承
抽象类和接口的区别:
抽象类的定义 abstract class A{}
接口的定义 interface A{}
抽象类中可以有成员变量,接口只能有静态常量
抽象类可以有抽象方法,也可以没有,接口中所有方法都是抽象方法
抽象类只支持单继承
一个类可以实现多个接口,接口之间支持多继承
package com;
import java.io.Serializable;
public class Demo02 {
public static void main(String[] args) {
}
}
interface Shape{
//接口中的成员变量都是静态常量
/*public static final*/ int I=10;
//接口中的方法都是public抽象方法
/*public abstract*/ void area();
}
//类如何实现接口,使用implemens关键字实现接口
class Crile /*extends Object*/implements Shape,Serializable{//实现多个接口
@Override
public void area() {
System.out.println("计算圆形的面积");
}
}
//接口之间可以多继承
interface A{}
interface B{}
interface C extends A,B{}
需求1(使用抽象类实现)
计算矩形和圆形的面积,并获取多种图形的面积的最大值(c是周长)
0.0625cc矩形
0.796cc圆形
0.0721cc六边形
需求2(使用接口实现)
银行卡系统(实现银联接口)
银联接口 用于描述银联统一的规则
检测密码,取款方法,查询余额
工商银行接口 用于描述工商银行卡的功能,除了满足银联接口功能之外
还要描述工商银行卡的独特功能,支持在线支付
农业银行接口 用于描述农业银行卡的功能,除了满足银联接口功能之外
还要描述工商银行卡的独特功能,支持透支功能,允许最多透支5000
实现工商银行接口和农业银行接口,测试功能
接口在软件中的功能
1)降低组件之间的耦合度
2)扩展组件的功能
独立开发
在银联系统中添加建设银行接口CCB
CCB是用来描述建行发行的卡片功能
满足银联接口的基本规则,另增加
支付水电费功能,水电费都有其账号
开发CCB接口
开发CCBImpl
开发缴纳水电费系统
方法的重载也是多态的一种现象
根据传递的参数不同,实现不同的功能
继承或实现时,父类型的引用指向子类型的对象
该引用就具备多态性
多态的意义:
一个类型的引用指向不同的对象,会有不同的功能实现
同一个对象,造型成不同的类型,会有不同的功能
向上造型,类型自动转化
UnionPay card=new ICBCImpl();
card.getBalabce();
一个类的对象可以向上造型为父类的类型和该类所实现的接口的类型
java编译器根据类型检查调用的方法是否匹配
运行的时候,是根据指向的具体对象决定调用哪个类中的方法
向下造型,强制转换
使用强制转换,必须确定该引用类型的变量指向的对象匹配要转换的类型
UnionPay card=new ICBCImpl();
card.getBalabce();
ICBCImpl icbcCard=(ICBCImpl)caed;
card.payOnline
如果出现强转的类型与对象的真实类型不匹配
不会出现编译错误,但是运行的时候会出现
ClassCastException异常