抽象类:
什么是抽象类:
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类特点:
1.抽象类用abstract修饰;
2.抽象类不能够实例化对象。
3.抽象方法必须在抽象类中,抽象类中可以没有抽象方法;
4.抽象方法没有方法体。
Parent类:
public abstract class Parent {
public abstract void called();
}
Parent测试类:
//以下代码会报错
public class ParentDemo {
public static void main(String[] args) {
Parent p = new Baby();
}
}
如果要用抽象类创建实例化对象,只能够通过多态的方式间接实例化:
父类:
public abstract class Parent {
public abstract void eat();
}
子类:
public class Baby extends Parent {
@Override
public void eat() {
System.out.println("宝宝要吃饭");
}
}
测试类:
public class Demo {
public static void main(String[] args) {
Parent p = new Baby();
p.eat();
}
}
抽象类成员特点:
抽象类中可以存在以下特点:
public abstract class Parent {
//成员变量
private int age=48;
//构造函数(有参,无参)
public Parent(){};
public Parent(int age){
};
//抽象方法
public abstract void eat();
//成员方法
public void work(){
System.out.println("工作!");
}
}
接口:
什么是接口:
官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口:
public interface Eating {
public abstract void eat();
}
实现类:
public class Person implements Eating {
@Override
public void eat() {
System.out.println("人吃饭");
}
}
测试类:
public class Demo {
public static void main(String[] args) {
Eating e = new Person();
e.eat();
}
}
接口特点:
- 用 interface 来定义。
- 类用implements来实现接口
- 接口中的所有成员变量都默认是由public static final修饰的。
public interface Inter {
int num0 =0;
public int num1 =10;
public static int num2 =20;
public static final int num3 = 30;
}
- 接口中的所有方法都默认是由public abstract修饰的。
public interface Inter01 {
void eat01();
public void eat02();
abstract void eat03();
public abstract void eat04();
}
- 接口没有构造方法。
- 接口没有构造方法,但是在接口的实现类中却可以调用super(),是因为Object类作为超类,由实现类间接继承了Object类。
接口的各种关系
- 接口和接口之间是继承关系,并且可以多继承
public interface Inter extends Inter01,Inter02{
}
- 接口和类是实现关系,可以多继承
public class InterImpl implements Inter01,Inter02{
}
接口和抽象类的区别
成员变量 | 成员方法 | 设计上 | |
---|---|---|---|
抽象类 | 与普通类一样 | 可以用abstract修饰 | 对类进行抽象 |
接口 | 默认由public static final | 默认由public abstract | 对行为抽象 |