Java基础知识

java基础4.接口与抽象类,继承与实现,重写与重载

2019-06-28  本文已影响0人  ygxing

一. 接口与抽象类

1.共同点

2. 接口

2.1 接口名方法默认修饰符
//省略了abstract修饰符
//同:public abstract interface IAnimal
public interface IAnimal {

    //省略了public abstract修饰符
    //同:public abstract void eat();
    void eat();

    //默认使用public abstract修饰符
    //同:public abstract void sleep();
    void sleep();

}
2.2 接口中只能有常量
public interface IAnimal {
    //省略了public修饰符
    //其他类可以通过IAnimal.COUNT_CURRENT调用
    final static int COUNT_CURRENT = 1000;
}
2.3 一个接口可以继承多个接口,一个类可以实现多个接口
// 食品接口
public interface IFood { }

// 动物接口
public interface IAnimal { }

// 食物链接口
public interface IAnimalFood extends IAnimal, IFood { }
2.4 普通实现类必须实现类中所有的抽象方法,包括父接口中的方法

抽象类可以不实现接口中的方法

//动物接口
public interface IAnimal {
    //吃东西
    void eat();
    //睡觉
    void sleep();
}

//鱼
public class Fish implements IAnimal {
    @Override
    public void eat() {
        System.out.println("fish is eating food");
    }

    @Override
    public void sleep() {
        System.out.println("fish is sleeping");
    }
}
2.5 java8中新增了default关键字
//动物接口
public interface IAnimal {
    // 吃东西
    void eat();

    // 睡觉,默认实现方法
   default void sleep(){
        System.out.println("animal is sleeping");
   }
}

//鱼
public class Fish implements IAnimal {
    @Override
    public void eat() {
        System.out.println("fish is eating food");
    }

    //可以重写sleep方法,也可以不重写
    @Override
    public void sleep() {
        System.out.println("fish is sleeping");
    }
}

3. 抽象类

3.1 一个类使用了abstract修饰,那么这个类就是抽象类
//抽象宠物类
public abstract class AbstractPet {
    //玩耍
    protected abstract void play();
}
3.2 抽象类可以实现接口和继承父类,并且不需要实现其中的抽象方法
//抽象宠物类
//没有实现IAnimal接口中的eat()和sleep()方法
public abstract class AbstractPet implements IAnimal {
    //宠物名称
    private String name;
    
    public AbstractPet(String name) {
        this.name = name;
    }
    public String getName() {
        return this.name;
    }
}
3.3 如果一个子类没有全部实现父类所有的抽象方法,那么这个子类必须定义为抽象类
//抽象宠物类
public abstract class AbstractPet {
    //玩耍
    protected abstract void play();
}

//抽象宠物狗
//如果不是抽象类,那么编译报错
public abstract class AbstractDog extends AbstractPet { } 
3.4 abstract关键字不能和private,static,final关键字一起使用

二. 继承与实现

java四大特性: 抽象,继承,封装,多态

1.继承

1.1 super关键字
// 抽象宠物类
public abstract class AbstractPet {
    //宠物名称
    private String name;

    //构造函数
    public AbstractPet(String name){
        //隐式调用Object类的无参构造方法,super();
        this.name = name;
    }

    // 玩耍
    protected abstract void play();

    // 吃饭
    public abstract void eat();
}

//宠物狗
public class Dog extends AbstractPet {
    public Dog(String name) {
        //因为父类没有提供无参构造器,
        //所以显式调用super(name)
        super(name);
    }
    @Override
    protected void play() {
        System.out.println("dog is playing");
    }

    @Override
    public void eat() {
        System.out.println("dog is eating food");
    }
}

2.实现

三. 重写与重载

1.重载(Overloading)
public class Int {
    priavte int num;
     //默认构造函数
    public Int(){}
    
    //重载构造函数
    public Int(int num){
        this.num = num;
    }
    //两个数求和
    public int sum(int a, int b) {
        return a + b;
    }
    //重载,三个数求和
    public int sum(int a, int b, int c) {
        return a + b + c;
    }
}
2.重写(Overriding):继承过程中, 覆盖父类的方法
//文件帮助类
public class FileHelper {
    // 查找文件
    //protected修饰方法,那么实现类的修饰符只能使用public或者protected
    //抛出IOException,那么子类只能抛出IOException及其子类,而不能直接抛出Exception异常
    protected void find(String path) throws IOException {
        System.out.println("FileHelper find file " + path);
    }
}

//自定义FileHelper
public class YanggxFileHelper extends FileHelper {
    // 查找文件 约定俗称加上Override进行精确重写
    // 父类方法使用了protected修饰符,重写方法只能使用public或者protected
    //父类方法抛出了IOException,重写方法只能抛出IOException以及子类
    @Override 
    public void find(String path) throws IOException {
        System.out.println("FileHelper find file " + path);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读