学习目标:
抽象类和接口
学习内容:
抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
抽象类用abstract关键字修饰,如果一个类包含抽象方法,那么该类必须是抽象类。任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
public abstract class Animal {
abstract void eat();
abstract void move();
}
抽象方法
使用 abstract 修饰的方法,没有方法体,只有声明。定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。
抽象类
包含抽象方法的类就是抽象类,反之不一定成立。通过 abstract 方法定义规范,然后要求子类必须定义具体实现。通过抽象类,我们就可以做到严格限制子类的设计,使子类之间更加通用。
1.有抽象方法的类只能定义成抽象类
2.抽象类不能被实例化,不能用new来实例化抽象类
3.抽象类可以包含属性、方法、构造方法。但是构造方法不能用来 new 实例, 只能用来被子类调用。
4.抽象类只能用来被继承。
5.抽象方法必须被子类实现。
public abstract class Handset {
String brand;
String type;
public Handset(){
}
public Handset(String brand, String type) {
this.brand = brand;
this.type = type;
}
public abstract void sendInfo();
public abstract void call();
public abstract void info();
}
接口
接口技术,这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现一个或多个接口,并在需要接口的地方随时使用实现了相应接口的对象.
在Java程序设计语言中,接口不是类,而是一组对类的需求描述.接口中所有方法都自动地属于public.因此在接口中声明方法是,不必提供关键字public.
public interface IPet {
void play();
String getName();
}
public interface PlayWiring {
String comiemt=" ";
void play(String comiemt);
}
为什么需要接口?接口和抽象类的区别
接口就是比“抽象类”还“抽象”的“抽象类”,可以更加规范的对子类进行约束。全 面地专业地实现了:规范和具体实现的分离。
抽象类还提供某些具体实现,接口不提供任何实现,接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。
从接口的实现者角度看,接口定义了可以向外部提供的服务。
从接口的调用者角度看,接口定义了实现者能提供那些服务。
子类通过 implements 来实现接口中的规范。
接口不能创建实例,但是可用于声明变量类型
一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是 public 的。
接口完全支持多继承。和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切
接口