抽象类
在一个类中,如果该类中存在一个功能,仅仅方法声明,没有方法体(抽象方法),需要将该类定义抽象类.
特点:
1.如果一个类中有抽象方法,那么该类一定是抽象类;
如果一个类是抽象类,那么该类中不一定存在抽象方法;
2.抽象类不能实例化(不能创建对象)
3.抽象类需要通过子类进行实例化,父类引用指向子类对象(父类是抽象类):抽象类多态!
(一定会存在具体的子类)
4.抽象方法的格式:没有方法体的方法
权限修饰符 abstract 返回值类型 方法名(形式参数) ;
抽象类的成员特点:
1.成员变量
即可定义一个常量,也可以定义为变量
2.成员方法:
既可以定义抽象方法,也可以定义非抽象方法
3.构造方法:
存在构造方法,既可以有参构造也可以是无参构造方法
抽象类成员方法特点:
成员方法如果是抽象方法,必须强制类完成的事情
成员方法如果是非抽象方法,子类继承父类
使用abstract应该注意:
abstract关键字不能和哪些关键字共用 (定义成员方法的时候)
和final关键字冲突
和private关键字冲突
和static关键字冲突
public abstract class Animal {
String name;
public abstract void sleep();
}
public class Cat extends Animal {
@Override
public void sleep() {
System.out.println("猫整天在睡觉");
}
//私有成员方法
public void play() {
System.out.println("猫喜欢玩老鼠");
}
}
public class Test {
public static void main(String[] args) {
//通过子类对象访问抽象类
Animal a=new Cat();
a.sleep();
//向下转型
Cat c=(Cat)a;
c.play();
}
}
接口
接口体现的是事物的一种扩展性功能.
接口的表示:interface
使用接口的注意事项:
-
接口中只能定义抽象方法
-
接口不能实例化
-
通过接口的子实现类来进行实例化
-
如果接口的子实现类是抽象类,不能实例化,那抽象类肯定存在具体的子类。
接口中 成员特点:
成员方法:
只能是抽象方法,存在默认的修饰符,public abstract
成员变量:
只能是常量.存在默认的修饰符:public static final
构造方法:
不存在构造方法
注意:
一个类继承另一个类的同时,可以实现多个接口
//定义接口
public interface A {
public void fly() ;
}
//接口子实现类
public class Bird implements A {
@Override
public void fly() {
System.out.println("鸟儿飞翔");
}
}
//测试
public class Test {
public static void main(String[] args) {
//通过子实现类实现接口
A a=new Bird();
a.fly();
}
}
抽象类和接口的区别
成员的区别
成员变量:
抽象类:既可以定义常量,也可以定义变量
接口:只能是常量,存在默认修饰符:public static final...
成员方法:
抽象类:既可以定义抽象方法,也可以定义非抽象方法
接口:只能是抽象方法,存在默认的修饰符:public abstract..
构造方法:
抽象类:存在构造方法,无参/有参,对数据进行构造初始化(分层初始化)
接口:没有构造方法
关系的区别
类与类之间
不管这个类是抽象类还是具体类,都继承关系(extends)
支持单继承,不支持多继承,可以多层继承
类与接口之间
实现关系(implements)
一个类继承另一个类的同时可以实现多个接口!
接口与接口之间
继承关系(extends)
支持单继承,以及多继承!
设计理念的区别
抽象类,----在抽象类多态中使用: 存在继承关系---- >体现的一种"is a"的关系
接口:体现的一个事物的扩展功能(额外功能),本身不具备的功能