抽象类 (abstract)
1.用abstract 修饰;不能和static, final,private 同时使用;
2.抽象类中不一定包含抽象方法;有抽象方法的一定是抽象类
2.抽象类无法创建对象;通常由子类继承后创建对象;子类可以是抽象类
也可以是非抽象类
抽象方法:
1.abstract
2.没有{},以;()结尾
3.只有方法声明,没有方法体
abstract class parent{
public abstract void say();
}
class child extends parent{
public void say() {
System.out.println("child");
}
}
public static void main(String[] args) {
child c = new child();
c.say();
子类需要实现抽象父类中所有的抽象方法,否则子类必须声明为抽象类。父类未实现其父类中的抽象方法(被声明为抽象类)子类要实现父类及以上父类中的所有抽象方法;
abstract class parent{
public abstract void say();
public abstract void L();
public static void work() { //静态方法 通过类名.方法名调用
System.out.println("work");
};
}
abstract class child extends parent{
public void say() {
System.out.println("child");
}
}
class children extends child{
public void L() {
System.out.println("必须通过普通类继承抽象类,实例化对象,调用方法");
}
}
public class Text {
public static void main(String[] args) {
children c = new children();
c.say();
c.work();
parent.work();
c.L();
子类实例化时会默认调用抽象父类中的无参构造方法,也能通过super()调用抽象父类中指定参数的构造方法
接口 (interface)
接口是全局常量和公共抽象方法的集合,可被看作一种特殊的类,也属于引用类型。
interface:声明接口
接口中的变量必须赋初值
//用interface声明接口
interface 接口名{
String name; //等价于 public static final String name; 全局常量
void say(); //等价于 public abstract void say(); 抽象方法
接口的实现(implements)
implements 可以实现多个接口,接口名之间用逗号隔开。
class 类名 implements 接口列表(可多个){
属性和方法
}
接口的继承(extends)
1.继承后会获得父类接口中所有抽象方法和常量
2.接口支持多重继承,一个接口可以继承多个父接口(类只能单继承)
类和类——继承 (单继承)
接口和接口—继承 (多继承)
类可以实现接口(implements)需要实现接口所有抽象方法,否则声明为abstract
interface 接口名 extends 接口列表(可多个){
全局常量声明
抽象方法声明
}
interface person{
void say();
}
interface parent extends person{
// interface parent
void work();
}
class child implements parent{
//或者class child implements parent,person{
public void work() {
System.out.println("学习");
}
public void say() {
System.out.println("child");
}
}
public class Text {
public static void main(String[] args) {
child c =new child();
c.say();
c.work();
}
}
在接口中,可以定义default方法
实现类可以不必覆写default方法。
default方法的目的是:当我们需要给接口新增一个方法时,会涉及到修改全部子类。如果新增的是default方法,那么子类就不必全部修改,只需要在需要重写的地方去重写default方法。
interface person{
void say();
default void run() {
可以写方法体
}
}
class child implements person{
public void say() {
System.out.println("child");
}
public void run() {
System.out.println("重写default方法");
}
}
public class Text {
public static void main(String[] args) {
child c =new child();
c.say();
c.run();
}
}
结果
child
重写default方法
接口和抽象方法
都包含抽象方法
都不能实例化对象
都是引用数据类型
接口 | 类 |
---|---|
只提供方法声明 | 可以提供完整方法,默认构造方法 ,及用于覆盖的方法声明 |
只包含public static final 常量,常量必须在声明时初始化 | 可以包含实例变量和静态变量 |
一个类或一个接口可以继承多个接口 | 一个类只能继承一个抽象类 |