您的位置:首页 > 编程语言 > Java开发

JAVA面向对象之接口分析

2018-01-15 21:15 246 查看

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{
publi
4000
c 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());
}
}


运行结果:

刘亦菲
姓名: 刘亦菲
姓名: 刘亦菲
整容变得更好看
我要努力挣钱 换个 女朋友
姓名: 刘亦菲
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息