JAVA面向对象之接口分析

JAVA面向对象之接口

简介

接口:
狭义的定义:
关键词
interface 接口名{}
广义的定义:
接口相当于一个规则

声明一个接口

注意:jdk1.8以前的规则
1.接口中只能声明抽象方法
2.如果你声明了一个方法 没写abstract 系统会默认帮你加上
(建议你先先写上 等写熟了再说)
3.接口没有构造方法 不能直接实例化对象
4.接口中定义了成员变量 默认修饰符 是 public static final
直接使用接口名去调

代码示例

public class Demo01{
    InterA inter = new InterAImpl();
    inter.fun();
}

class InterA{
    public staic final int num = 10;
    public abstract void fun();
}

class InterAImpl implements InterA{
    //重写接口中的fun方法
    public void fun(){
        System.out.println(num);
        System.out.println("我是实现类的fun方法");
    }
}

类/接口之间的关系

类和类的关系
类与类是继承关系 只能单继承(亲爹只有一个)   可以多层继承

类和接口的关系
类与接口是实现关系 可以单实现 也可以多实现

接口和接口的关系
接口与接口之间是继承关系 可以单继承 也可以多继承

代码示例

interface InterA{
    public abstract void fun1();
}

interface InterB{
    public abstract void fun2();
}

interface InterC extends InterA,InterB{

}

class InterImpl implements InterA,InterB{
    public void fun1(){

    }
    public void fun2(){

    }
}
abstract class Animal{
    public abstract void eat();
    public abstract void speak();
}

interface JumpAnimal{
    public abstract void jump();
} 

class Cat extends Animal{
    public void eat(){
        System.out.println("吃食物")
    }
    public void speak(){
        System.out.println("喵喵叫");
    }
}

class JumpCat extends Animal implements JumpAnimal{
    public void jump(){
        System.out.println("训练猫 跳高");
    }
}

代码示例

需求:
/*
 * 经过国际主板研究协会讨论 
 * 最终要求 主板生产商 要按规则生产可插卡的主板
 * 所有的卡都要有 开始和停止的方法
 * 设计完成 生产 大力牌主板
 * 
 * 主板接口(插卡方法)
 * 抽象卡类(开始和停止方法)
 * 网卡继承抽象类
 * 大力牌 实现 接口
 */
public class Demo03{
   public static void main(String[] args){
       DLBoard dl = new DLBoard();
       dl.run();
       dl.insertCard(new NetCard());
   } 
}

interface Board{
   public abstract void run();
   public abstract void insertCard(Card card);
}

abstract class Card{
    public abstract void start();
    public abstract void stop();
}

class NetCard extends Card{
    public void start(){
        System.out.println("网已连上");
    }
    public void stop(){
        System.out.println("网已断开");
    }
}

class DLBoard implements Board{
    public void run(){
        System.out.println("主板已启动");
    }
    public void insertCard(Card card){
        card.start();
        card.stop();
    }
}

JDK接口新特性

接口可以声明
1.抽象方法
2.静态方法
3.默认方法

分析思路:(如何使用的思路)
1.明确写法
2.明确如何在接口和实现类中调用
3.明确如何使用对象去调用
4.总结要注意什么

抽象类和接口的区别

1.成员变量
抽象类: 可以是变量 也可以是常量
接口: 只能是常量

2.成员方法
抽象类: 可以是抽象方法 也可以是普通方法
接口: 只能是抽象方法

3.构造方法
抽象类: 有构造方法 可以被继承
接口: 无构造方法 只能被实现

代码示例

public Demo04{
    public static void main(String[] args){
        InterA inter = new InterAImpl();
        inter.fun1();  //输出:我在实现类中实现了InterA中得fun1函数
        InterAImpl.fun2();  //输出:我是实现类中得静态方法
        InterA.fun2(); //输出:我是接口中的静态方法
        inter.fun3();  //输出:我是实现类中的默认方法

        InterAImpl interri = (InterAImpl) inter;
        interri.fun4();  //输出:我是实现类中得特有方法
    }
}

interface InterA{
    //抽象方法
    public abstract void fun1();
    //静态方法
    public static void fun2(){
        System.out.println("我是接口中的静态方法");
    }
    //默认方法
    public default void fun3(){
        System.out.println("我是接口中的默认方法");
    }
}

class InterAImpl implements InterA{
    //重写抽象方法
    public void fun1(){
        System.out.println("我在实现类中实现了InterA中得fun1函数");
    }
    //重写静态方法
    public static void fun2(){
        System.out.println("我是实现类中得静态方法");
    }
    //重写默认方法
    public default void fun3(){
        System.out.println("我是实现类中的默认方法");
    }
    //特有方法
    public void fun4(){
        System.out.println("我是实现类中得特有方法");
    }
}

代码示例

/*
 * 模板设计模式---(设计思想)
 * 需求:
 * 学习类 来蓝欧学习 
 * 报名缴费 
 * 选择学科进行学习(java H5 VR)
 * 毕业找工作
 */
public Demo05{
    public static void main(String[] args){
        LanOuStudy ybq = new YPZ();
        ybq.study();

        LanOuStudy zlp = new ZLP();
        zlp.study();
    }
}

abstract class LanOuStudy{
    public void study(){
        System.out.println("报名,缴学费");
        chooseSubject();
        System.out.println("学完,找工作");
    }
    public abstract void chooseSubject();
}

class YPZ extends LanOuStudy{
    public void chooseSubject(){
        System.out.println("选择学习java");
    }
}

class ZLP extends LanOuStudy{
    public void chooseSubject(){
        System.out.println("选择学习H5");
    }
}

代码示例

/*
 * 计算一个程序的 运行时间
 */
public class Demo06{
    public static void main(String[] args){
        Calculate calculate = new Calculate();
        calculate.run();
    }
}
abstract class Calculate{
    public void run(){
        long start = System.currentTimeMillions();
        fun();
        long stop = System.CurrentTimeMillons();
    }
    System.out.println("运行时间为:" + (stop - start));
    public abstract void fun();
}

class Test extends Calculate{
    public void fun(){
        for(int i = 1; i <= 10000; i++){
            System.out.println(i);
        }
    }
}

代码示例

package com.lanou3g.p02;

public interface EarnMoney {
    public abstract void earnMoney();
}
package com.lanou3g.p02;

public abstract class Person {
    private String name;
    private String sex;

    public Person() {

    }
    public Person(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "姓名: " + name;
    }
    public abstract void eat();
}

package com.lanou3g.p02;

public class Man extends Person implements EarnMoney{ 
    private Women women;

    public Man() {

    }
    public Man(String name, String sex) {
        super(name, sex);
    }

    public Women getWomen() {
        return women;
    }
    public void setWomen(Women women) {
        this.women = women;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString();
    }
    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("男人吃饭");
    }
    @Override
    public void earnMoney() {
        // TODO Auto-generated method stub
        System.out.println("我要努力挣钱 换个 女朋友");
    }

}
package com.lanou3g.p02;

public class Women extends Person{
    private Man man;

    public Women() {

    }
    public Women(String name, String sex) {
        super(name,sex);
    }

    public Man getMan() {
        return man;
    }
    public void setMan(Man man) {
        this.man = man;
    }

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString();
    }
    @Override
    public void eat() {
        // TODO Auto-generated method stub
        System.out.println("女人吃素");
    }

    public void changeFace() {
        System.out.println("整容变得更好看");
    }

}
package com.lanou3g.p02;

public class Test {
    public static void main(String[] args) {
        Man man = new Man("康灯","男");
        man.setWomen(new Women("刘亦菲","女"));
        System.out.println(man.getWomen().getName());
        System.out.println(man.getWomen().toString());
        System.out.println(man.getWomen());
        man.getWomen().changeFace();
        man.earnMoney();
        System.out.println(man.getWomen());
    }
}
运行结果:

刘亦菲
姓名: 刘亦菲
姓名: 刘亦菲
整容变得更好看
我要努力挣钱 换个 女朋友
姓名: 刘亦菲

你可能感兴趣的:(JavaSE)