什么是抽象类?在面向对象中,如果一个类中的信息并不能完整地描述一个对象,这样的类就是抽象类,拿我们之前的例子:

Dog类和Cat类继承了Animal类,Animal中有eat方法,但是猫除了吃,还能抓老鼠,如果在Animal中加上抓老鼠的方法,那么狗继承了Animal,也就是说狗也能抓老鼠,这显然有点不现实,所以Animal并不能完整的描述一个对象,此时我们可以把它设计成抽象类,那么如何设计?
当一个类被abstract关键字修饰时,这个类就是抽象类
abstract class Animal{
//...
}
注意事项:
1.抽象类中可以包含普通的方法和属性,也可以包含构造方法
2.如果一个方法被abstract修饰,表示该方法是抽象方法,抽象方法不能有具体的实现,如
abstract class Animal{
public abstract void func();
}
抽象类有以下特点:
Animal animal = new Animal();
//错误的,抽象类不能实例化
抽象类中的抽象方法不能是private修饰的
抽象类中的抽象方法不能有具体实现,是因为抽象类的作用主要是被继承,子类需要重写抽象类中的抽象方法
abstract class Animal{
public abstract void func(){}//错误的,花括号就表示这个方法有具体实现
}
接口是啥?在java中,可以认为是很多个类的公共规范,接口是一种引用数据类型.比如USB接口,安卓充电器接口,这些接口都是统一大小的,只要符合规范,大家都能使用它.
在java中,接口的定义和类的定义格式比较类似,将class替换成interface关键字即可
public interface 接口名{
//....
}
interface IA {
static void fun1() {
System.out.println("static");
}
default void fun2() {
System.out.println("default");
}
}
interface IA {
int A = 10;
void func();
}
interface IA {
int A = 10;
void func();
}
class A implements IA{
@Override
public void func() {
}
}
java中不能有多继承(一个类继承多个类),但是一个类可以实现多个接口,接口很好的解决了java不能多继承这个问题
interface IA {
//...
}
interface IB {
//...
}
class A implements IA, IB {
//...
}
接口之间也可以继承,接口之间的继承同样使用extends
interface IA {
//...
}
interface IB extends IA {
//...
}
父类Animal(抽象类)
public abstract class Animal {
protected String name;
protected int age;
public Animal(String name, int age) {
this.age = age;
this.name = name;
}
}
IFly接口
public interface IFly {
void Flying();
}
IRunning接口
public interface IRunning {
void Running();
}
子类(实现了IFly, IRunning接口,并且重写了接口中的方法)
public class Duck extends Animal implements IFly, IRunning {
public Duck(String name, int age) {
super(name, age);
}
@Override
public void Flying() {
System.out.println(this.name + "正在飞");
}
@Override
public void Running() {
System.out.println(this.name + "正在跑");
}
}