这一周,我进行了接口的学习,当然了,学习是循序渐进的,我首先学习了抽象类与抽象方法,一个抽象类可以没有抽象方法,但是有抽象方法的类一定要是抽象类,抽象类作为父类,在抽象类中使用abstract关键字修饰抽象方法,作用是可以让子类必须重写父类这个方法,在我的理解当中,抽象类的最大的作用就是规范性,值得一提的是,抽象类中是可以定义构造方法以及成员变量的,可以让子类进行赋值。请看如下代码:
我首先写了一个抽象类:
public abstract class Animal {
private String name;
private int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void eat();
}
注意看,abstract修饰的eat方法,而且我并没有写方法体,这就是一个抽象方法。我写了一个子类,请看:
public class frog extends Animal implements Swim{
public frog() {
}
public frog(String name, int age) {
super(name, age);
}
@Override
public void swim(){
System.out.println("青蛙在游泳");
}
@Override
public void eat(){
System.out.println("青蛙在吃东西");
}
}
忽略接口,请看抽象类的继承,我在子类中必须重写eat方法,否则就会报错。而子类也当然可以是一个抽象类,请看如下代码:
public abstract class oo extends Animal{
public abstract void have();
}
如果子类仍然是一个抽象类,那么它就可以不重写父类Animal的方法。
接下来,谈谈我对接口的拙见。
所谓接口,就是一个类,里面写了很多的抽象方法,当然,里面也可以写一些默认方法,也可以有成员变量,但必须是public static final的,在我看来,接口的作用就是规范,和抽象类最大的区别就是接口更为灵活,灵活的点请看接下来的代码。那怎样定义一个接口呢,我们需要使用interface关键字。请看如下代码:
public interface Swim {
public abstract void swim();
}
这是一个名为Swim的接口
public class rabbit extends Animal {
@Override
public void eat(){
System.out.println("兔子在吃胡萝卜");
}
}
public class Dog extends Animal implements Swim{
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
@Override
public void swim(){
System.out.println("狗在狗刨");
}
@Override
public void eat(){
System.out.println("小狗在吃骨头");
}
}
我写了狗和兔子两个动物,狗会游泳,所以我们是用implements关键字接入Swim接口,而兔子不会游泳,就不接入接口,在我看来,这是比抽象类灵活的地方。