抽象类和接口的定义
抽象类:
- 用abstract修饰的类,不可以直接被实例化;
- 只能通过子类继承才实例化;
- 抽象类里可以有抽象方法和非抽象方法;
- 因为是类与类的继承,在Java中类的继承是单继承;
- 子类必须重写抽象类里面的所有抽象方法;
- 子类对象可以直接得到抽象类的非抽象方法。
接口:
- 定义的方法没有方法体(JDK1.8之后可以有方法体);
- 只能通过其他的类来实现(implements)接口里的方法,必须实现所有的方法;
- 接口与接口之间是多继承;
- 一个实现类可以实现多个接口;
- 方法的默认修饰符是 public abstract。
抽象类代码实现:
定义一个抽象类
public abstract class AbstractAnimal {
public abstract void eat();
public abstract void sleep();
public void invoke(){
System.out.println("------调用了抽象类的具体方法-------");
this.eat();
this.sleep();
}
}
分别用两个类来继承
public class Dog extends AbstractAnimal{
@Override
public void eat() {
System.out.println("狗在吃饭");
}
@Override
public void sleep() {
System.out.println("狗在睡觉");
}
}
public class Cat extends AbstractAnimal {
@Override
public void eat() {
System.out.println("猫在吃饭");
}
@Override
public void sleep() {
System.out.println("猫在睡觉");
}
}
测试
public class TestClass {
public static void main(String[] args) {
Dog animal1 = new Dog();
Cat animal2 = new Cat();
animal1.invoke();
animal2.invoke();
}
}
输出结果
接口代码实现
定义两个接口
public interface MyInterface1 {
void method1();
String method2();
void method3(int data1,int data2);
}
public interface MyInterface2 {
void way1();
String way2();
void way3(int a,int b);
}
定义一个实现类实现两个接口
public class MyInterfaceImpl implements MyInterface1,MyInterface2 {
@Override
public void method1() {
System.out.println("执行了method1");
}
@Override
public String method2() {
System.out.println("执行了method2");
return null;
}
@Override
public void method3(int data1,int data2) {
System.out.println("执行了method3");
}
@Override
public void way1() {
System.out.println("执行了way1");
}
@Override
public String way2() {
System.out.println("执行了way2");
return null;
}
@Override
public void way3(int a, int b) {
System.out.println("执行了way3");
}
}
测试类:
public class TestClass {
public static void main(String[] args) {
MyInterface1 interface1 = new MyInterfaceImpl();
MyInterface2 interface2 = new MyInterfaceImpl();
interface1.method1();
interface1.method2();
interface1.method3(0,0);
interface2.way1();
interface2.way2();
interface2.way3(0,0);
}
}
输出结果
总结
接口与实现都是规范了代码,可以根据实际情况来选择接口或实现类。以上就是我对接口和实现类的理解,若有不足,请大家指出!感谢!