六.面向对象3--抽象、接口

抽象

用abstract修饰方法则为抽象方法,包含抽象方法的类为抽象类,子类必须实现抽象方法;(定义规范)
1.有抽象方法的类只能定义成抽象类
2.抽象类不能实例化,既不能用new来实例抽象类
3.抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。
4.抽象类只能用来被继承
5.抽象方法必须被子类实现

package com.bhzt.abstracttest;

/**
 * 抽象
 */
public abstract class Animal {
    abstract public  void shout();
}
package com.bhzt.abstracttest;

public class Dog extends Animal {
    @Override
    public void shout() {
        System.out.println("汪汪汪");
    }
}

接口

定义的一组规范
可以更加规范的对子类进行约束,将规范和具体实现分离
说明:
1.访问修饰符:只能是public(默认即为public)
2.一个接口可以继承多个接口,一个子类可以实现多个接口
3.属性只能是常量,用public static final修饰(默认即为)
4.接口中的方法只能是,public abstract(默认即为)
5.接口不能创建实例
6.一个类实现了接口,必须实现接口中所有的方法,并且这些接口只能是public
7.JDK1.8之前,接口中只能包含静态常量、抽象方法,JDK1.8及以后接口中包含了普通的静态方法、默认方法

普通类:具体实现
抽象类:具体实现、规范(抽象方法)
接口:JDK1.8以前是纯规范,JDK1.8及以后版本定义静态方法和默认方法

package com.bhzt.interfacetest;

/**
 * 动物接口
 */
public interface Animal {
    String defense="防御";//默认省略了 public static final
    void shout();//默认省略了 public abstract

    /**
     * JDK1.8及以后版本支持接口定义默认方法
     */
    default void move(){
        System.out.println("我是如何移动的");
    }
}
package com.bhzt.interfacetest;

/**
 * 吃
 */
public interface Eat {
    void food();

    /**
     * JDK1.8及以后版本支持接口定义静态方法
     */
    public static void  howEat()
    {
        System.out.println("如何吃");
    }
}
package com.bhzt.interfacetest;

/**
 * 接口多继承
 */
public interface LandAnimal extends Animal,Eat {
    void  live();
}
package com.bhzt.interfacetest;

public class Dog implements Animal,Eat {
    @Override
    public void shout() {
        System.out.println("汪汪汪");
    }

    @Override
    public void food() {
        System.out.println("吃骨头");
    }

    @Override
    public void move() {
        System.out.println("陆地上用四肢移动");
    }

    public static void  howEat()
    {
        System.out.println("用锋利的牙齿撕碎食物");
    }


}

package com.bhzt.interfacetest;

public class Cat implements LandAnimal {
    @Override
    public void live() {
        System.out.println("有的流浪,有的被当做宠物");
    }

    @Override
    public void shout() {
        System.out.println("喵喵喵");
    }

    @Override
    public void food() {
        System.out.println("吃鱼");
    }
}

package com.bhzt.test;

import com.bhzt.interfacetest.Dog;
import com.bhzt.interfacetest.Eat;
import com.bhzt.polymorphism.Animal;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.*;

class DogTest {

    @Test
    void shout() {

    }

    @Test
    void move(){
        Dog d=new Dog();//接口的默认方法,必须创建子类的对象 并实现方法后调用
        d.move();
    }

    @Test
    void food() {

    }

    @Test
    void howEat(){
        Eat.howEat();//接口的静态方法可以直接调用
        Dog.howEat();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值