09-04 java 接口

前端之家收集整理的这篇文章主要介绍了09-04 java 接口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

接口的引出

继续回到我们的猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不。但是,现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,狗跳高,狗做计算等。

而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的,对不。

所以,这些额外的动作定义到动物类中就不合适,也不适合直接定义到猫或者狗中,因为只有部分猫狗具备这些功能

所以,为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些猫狗需要被培训,只需要这部分猫狗把这些额外功能实现即可。

接口的特点

方法。(推荐方案)
由此可见:
    A:具体类多态(几乎没有)
    B:抽象类多态(常用)
    C:接口多态(最常用)

<span style="color: #008000;">*/
<span style="color: #008000;">//<span style="color: #008000;">定义动物培训接口,这里没有class
<span style="color: #0000ff;">interface<span style="color: #000000;"> AnimalTrain {
<span style="color: #0000ff;">public <span style="color: #0000ff;">abstract <span style="color: #0000ff;">void<span style="color: #000000;"> jump();
}

<span style="color: #008000;">//<span style="color: #008000;">抽象类实现接口
<span style="color: #0000ff;">abstract <span style="color: #0000ff;">class Dog <span style="color: #0000ff;">implements<span style="color: #000000;"> AnimalTrain {
}

<span style="color: #008000;">//<span style="color: #008000;">具体类实现接口
<span style="color: #0000ff;">class Cat <span style="color: #0000ff;">implements<span style="color: #000000;"> AnimalTrain {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> jump() {
System.out.println("猫可以跳高了"<span style="color: #000000;">);
}
}

<span style="color: #0000ff;">class<span style="color: #000000;"> InterfaceDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">AnimalTrain是抽象的; 无法实例化
<span style="color: #008000;">//<span style="color: #008000;">AnimalTrain at = new AnimalTrain();
<span style="color: #008000;">//<span style="color: #008000;">at.jump();
<span style="color: #000000;">
AnimalTrain at = <span style="color: #0000ff;">new<span style="color: #000000;"> Cat();
at.jump();
}
}

接口的成员特点

方法:接口没有构造方法。 成员方法:只能是抽象方法。 默认修饰符:public abstract 建议:自己手动给出。 所有的类都默认继承自一个类:Object。 类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。 num = 10 num2 = 20 num3 = 30;</span><span style="color: #ff0000;"&gt;//<a href="/tag/cuowu/" target="_blank" class="keywords">错误</a>: 需要<标识符>。接口没有构造<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>。 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt; public Inter() {} </span><span style="color: #ff0000;"&gt;//接口<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>不能带有主体 </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;public void show() <span style="color: #ff0000;"&gt;{} </span></span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;abstract void show(); </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;默认public</span> <span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> show(); <span style="color: #ff0000;"&gt;//默认abstract。只能是抽象<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>。默认修饰符:public abstract</span>

<span style="color: #000000;">}

<span style="color: #ff0000;">//接口名+Impl这种格式是接口的实现类格式
/<span style="color: #008000;">
class InterImpl implements Inter {
public InterImpl() {
super();
}
}
<span style="color: #008000;">
/

<span style="color: #0000ff;">class InterImpl <span style="color: #0000ff;">extends Object <span style="color: #0000ff;">implements<span style="color: #000000;"> Inter {
<span style="color: #0000ff;">public<span style="color: #000000;"> InterImpl() {
<span style="color: #0000ff;">super<span style="color: #000000;">();
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show() {}

}

<span style="color: #008000;">//<span style="color: #008000;">测试类
<span style="color: #0000ff;">class<span style="color: #000000;"> InterfaceDemo2 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象
Inter i = <span style="color: #0000ff;">new<span style="color: #000000;"> InterImpl();
System.out.println(i.num);
System.out.println(i.num2);
<span style="color: #008000;">//<span style="color: #008000;">i.num = 100;
<span style="color: #008000;">//<span style="color: #008000;">i.num2 = 200;
<span style="color: #008000;">//<span style="color: #008000;">System.out.println(i.num); <span style="color: #ff0000;">//无法为最终变量num分配值。只能是常量,并且是静态的。
<span style="color: #008000;">//<span style="color: #008000;">System.out.println(i.num2);<span style="color: #008000;">//<span style="color: #008000;">无法为最终变量num2分配值
<span style="color: #000000;"> System.out.println(Inter.num);
System.out.println(Inter.num2);
System.out.println("--------------"<span style="color: #000000;">);
}
}

类与类,类与接口,接口与接口的关系

<span style="color: #0000ff;">interface<span style="color: #000000;"> Mother {
<span style="color: #0000ff;">public
<span style="color: #0000ff;">abstract
<span style="color: #0000ff;">void
<span style="color: #000000;"> show2();
}

<span style="color: #0000ff;">interface Sister <span style="color: #0000ff;">extends<span style="color: #000000;"> Father,Mother {

}

<span style="color: #008000;">//<span style="color: #008000;">class Son implements Father,Mother <span style="color: #008000;">//<span style="color: #008000;">多实现
<span style="color: #0000ff;">class Son <span style="color: #0000ff;">extends Object <span style="color: #0000ff;">implements<span style="color: #000000;"> Father,Mother {
<span style="color: #0000ff;">public <span style="color: #0000ff;">void<span style="color: #000000;"> show() {
System.out.println("show son"<span style="color: #000000;">);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; show2() {
    System.out.println(</span>"show2 son"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> InterfaceDemo3 {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">创建对象
Father f = <span style="color: #0000ff;">new<span style="color: #000000;"> Son();
f.show();
<span style="color: #008000;">//<span style="color: #008000;"> f.show2(); <span style="color: #008000;">//<span style="color: #008000;">报错
<span style="color: #000000;">
Mother m = <span style="color: #0000ff;">new<span style="color: #000000;"> Son();
<span style="color: #008000;">//<span style="color: #008000;">m.show(); <span style="color: #008000;">//<span style="color: #008000;">报错
<span style="color: #000000;"> m.show2();
}
}

抽象类与接口的区别

方法:有 成员方法:可以抽象,也可以非抽象 接口: 成员变量:只可以常量 无构造方法 成员方法:只可以抽象

B:关系区别
类与类
继承,单继承
类与接口
实现,单实现,多实现
接口与接口
继承,单继承,多继承

C:设计理念区别
抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能
接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能

猫狗案例,加入跳高的额外功能

功能
分析:从具体到抽象
    猫:
        姓名,年龄
        吃饭,睡觉
    狗:
        姓名,年龄
        吃饭,睡觉

    由于有共性<a href="/tag/gongneng/" target="_blank" class="keywords">功能</a>,所以,我们抽取出一个<a href="/tag/fulei/" target="_blank" class="keywords">父类</a>:
    动物:
        姓名,年龄
        吃饭();
        睡觉(){}

    猫:继承<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>物
    狗:继承<a href="/tag/zidong/" target="_blank" class="keywords">自动</a>物

    跳高的额外<a href="/tag/gongneng/" target="_blank" class="keywords">功能</a>是一个新的扩展<a href="/tag/gongneng/" target="_blank" class="keywords">功能</a>,所以我们要定义一个接口
    接口:
        跳高

    部分猫:实现跳高
    部分狗:实现跳高
实现;
    从抽象到具体

使用:
    使用具体类

<span style="color: #008000;">*/
<span style="color: #008000;">//<span style="color: #008000;">定义跳高接口
<span style="color: #0000ff;">interface<span style="color: #000000;"> Jumpping {
<span style="color: #008000;">//<span style="color: #008000;">跳高功能
<span style="color: #0000ff;">public <span style="color: #0000ff;">abstract <span style="color: #0000ff;">void<span style="color: #000000;"> jump();
}

<span style="color: #008000;">//<span style="color: #008000;">定义抽象类
<span style="color: #0000ff;">abstract <span style="color: #0000ff;">class<span style="color: #000000;"> Animal {
<span style="color: #008000;">//<span style="color: #008000;">姓名
<span style="color: #0000ff;">private<span style="color: #000000;"> String name;
<span style="color: #008000;">//<span style="color: #008000;">年龄
<span style="color: #0000ff;">private <span style="color: #0000ff;">int<span style="color: #000000;"> age;

</span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; Animal() {}

</span><span style="color: #0000ff;"&gt;public</span> Animal(String name,<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
    </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
}

</span><span style="color: #0000ff;"&gt;public</span><span style="color: #000000;"&gt; String getName() {
    </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; name;
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; setName(String name) {
    </span><span style="color: #0000ff;"&gt;this</span>.name =<span style="color: #000000;"&gt; name;
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; getAge() {
    </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; age;
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span> setAge(<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    </span><span style="color: #0000ff;"&gt;this</span>.age =<span style="color: #000000;"&gt; age;
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;吃饭(); --  抽象</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;abstract</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; eat();

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;睡觉(){}</span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; sleep() {
    System.out.println(</span>"睡觉觉了"<span style="color: #000000;"&gt;);
}

}

<span style="color: #008000;">//<span style="color: #008000;">具体猫类
<span style="color: #0000ff;">class Cat <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public<span style="color: #000000;"> Cat(){}

</span><span style="color: #0000ff;"&gt;public</span> Cat(String name,<span style="color: #0000ff;"&gt;int</span><span style="color: #000000;"&gt; age) {
    </span><span style="color: #0000ff;"&gt;super</span><span style="color: #000000;"&gt;(name,age);
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;重写抽象那个<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; eat() {
    System.out.println(</span>"猫吃鱼"<span style="color: #000000;"&gt;);
}

}

<span style="color: #008000;">//<span style="color: #008000;">具体狗类
<span style="color: #0000ff;">class Dog <span style="color: #0000ff;">extends<span style="color: #000000;"> Animal {
<span style="color: #0000ff;">public<span style="color: #000000;"> Dog(){}

</span><span style="color: #0000ff;"&gt;public</span> Dog(String name,age);
}

</span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;重写抽象那个<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a></span>
<span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; eat() {
    System.out.println(</span>"狗吃肉"<span style="color: #000000;"&gt;);
}

}

<span style="color: #008000;">//<span style="color: #008000;">有跳高功能的猫
<span style="color: #008000;">//<span style="color: #008000;">继承Cat类,又继承跳高接口
<span style="color: #0000ff;">class JumpCat <span style="color: #0000ff;">extends Cat <span style="color: #0000ff;">implements<span style="color: #000000;"> Jumpping {
<span style="color: #0000ff;">public<span style="color: #000000;"> JumpCat() {}

</span><span style="color: #0000ff;"&gt;public</span> JumpCat(String name,age);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; jump() {
    System.out.println(</span>"跳高猫"<span style="color: #000000;"&gt;);
}

}

<span style="color: #008000;">//<span style="color: #008000;">有跳高功能的狗
<span style="color: #008000;">//<span style="color: #008000;">继承Dog类,又继承跳高接口
<span style="color: #0000ff;">class JumpDog <span style="color: #0000ff;">extends Dog <span style="color: #0000ff;">implements<span style="color: #000000;"> Jumpping {
<span style="color: #0000ff;">public<span style="color: #000000;"> JumpDog() {}

</span><span style="color: #0000ff;"&gt;public</span> JumpDog(String name,age);
}

</span><span style="color: #0000ff;"&gt;public</span> <span style="color: #0000ff;"&gt;void</span><span style="color: #000000;"&gt; jump() {
    System.out.println(</span>"跳高狗"<span style="color: #000000;"&gt;);
}

}

<span style="color: #0000ff;">class<span style="color: #000000;"> InterfaceTest {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">定义跳高猫并测试
JumpCat jc = <span style="color: #0000ff;">new<span style="color: #000000;"> JumpCat();
jc.setName("哆啦A梦"<span style="color: #000000;">);
jc.setAge(3<span style="color: #000000;">);
System.out.println(jc.getName()+"---"+<span style="color: #000000;">jc.getAge());
jc.eat();
jc.sleep();
jc.jump();
System.out.println("-----------------"<span style="color: #000000;">);

    JumpCat jc2 </span>= <span style="color: #0000ff;"&gt;new</span> JumpCat("加菲猫",2<span style="color: #000000;"&gt;);
    System.out.println(jc2.getName()</span>+"---"+<span style="color: #000000;"&gt;jc2.getAge());
    jc2.eat();
    jc2.sleep();
    jc2.jump();

    </span><span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;定义跳高狗并进行测试的事情自己完成。</span>

<span style="color: #000000;"> }
}

 

猜你在找的Java相关文章