一、抽象类(Abstract)
抽象类不可以创建对象,其他和普通类一致,可以有成员,静态方法和构造方法(提供子类调用)
抽象方法:用abstract定义了方法签名,但没有语句
含有抽象方法的类称为抽象类,抽象类中不一定有抽象方法,但是抽象方法的类必须是抽象类。
抽象方法必须被子类实现,如果子类不识闲父类的抽象方法,那么子类也必须是抽象类
抽象类的作用:
被继承
强迫子类实现抽象方法
抽方法相当于定义规范
面向抽象编程的本质
二、接口(Interface)
一种数据类型,引用数据类型
使用interface声明一个接口,接口只有抽象方法实现interface使用implement一个class可以实现多个interface
不能定义实例字段,不能定义普通方法,可以定default方法
一个接口可以extends另一个接口,相当于扩展接口方法接口层次代表抽象程度
接口也是数据类型,适用于向上转型和向下转型
如果一个类中所有的方法均为abstract方法,那么这个类就可以声明为接口
public abstract class MyClass {
public abstract void print();
public abstract String fun();
public abstract void show();
}
可以改为接口
public interface MyInterface {
void print();
String fun();
void show();
}
接口不是类,不可以构造方法
接口可以包含:抽象方法(可以省略public abstract 默认是public)、非抽象方法(JDK1.8新特性,必须使用default关键字)、属性常量(public static final),public static final可与省略不写
public interface MyInterface {
String name="张三";
public static final String name2="张三";//等同上一句
void show();
String fun();
int [] method();
/**JDK1.8新特性 ,必须使用default关键字*/
public default void method2(){
}
//接口中不允许定义构造方法
/* public MyInterface(){
}*/
}
三、接口与类的关系
1.类去实现接口中的抽象方法,实现关系implements,实现接口中所有抽象方法
public class InterfaceImpl implements MyInterface{
@Override
public void show() {
// TODO Auto-generated method stub
}
@Override
public String fun() {
// TODO Auto-generated method stub
return null;
}
@Override
public int[] method() {
// TODO Auto-generated method stub
return null;
}
}
2.一个类存在继承关系,有存在实现关系
extends在前,implement在后
1 public class Stuent extends Person implements Play{
}
3.如果父类与接口中有完全相同的方法
父类有线于接口,子类实现的是父类中的方法
4.如果父类中与接口中有同名方法(只是名字相同,参数不同)
父类与接口中的方法,在子类/实现类中构成方法的重载
四、接口的特征:传递性和继承性(多继承)
public interface InterfaceA {
public void show();
}
interface InterfaceB {
}
interface InterfaceC extends InterfaceB,InterfaceA{
}
class Impl implements InterfaceC{
@Override
public void show() {
// TODO Auto-generated method stub
}
}
五、使用接口的意义
具体实现意义看一下代码
public interface Fly {
public void flying();//飞行的能力
}
class AirPlane implements Fly{
@Override
public void flying() {
System.out.println("飞机在祖国的蓝天上自由飞翔...........");
}
}
class Bird implements Fly{
@Override
public void flying() {
System.out.println("小鸟唱着动听的歌,在天空中飞................");
}
}
class FootBall implements Fly{
@Override
public void flying() {
System.out.println("球被踢了一脚,划了个美丽的弧线飞到了对方的球门里..........");
}
}
public class Test {
public static void main(String[] args) {
//接口类型(引用数据类型)指向实现类的对象
Fly airPlane=new AirPlane();
Fly bird =new Bird();
Fly football=new FootBall();
//调用相同的方法
airPlane.flying();
bird.flying();
football.flying();
//运行结果,不相同
}
}
网友评论