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()); } }
运行结果: 刘亦菲 姓名: 刘亦菲 姓名: 刘亦菲 整容变得更好看 我要努力挣钱 换个 女朋友 姓名: 刘亦菲
相关文章推荐
- 黑马程序员-java面向对象问题分析
- Java面向对象程序设计之接口应用
- 一个例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- JAVA面向对象特性与接口(下)
- Java面向对象基础--类的设计及分析问题的方法---用户登录例子
- 一个饲养员给动物喂食物的例子体现JAVA中的面向对象思想,接口(抽象类)的用处
- java面向对象之接口与抽象类
- Java学习系列(五)Java面向对象之抽象类、接口、内部类、枚举类详解
- 黑马程序员_java面向对象总结【3】(继承、接口和多态)
- Java面向对象基础--引用传递分析
- Java学习第六_八天:面向对象__继承_接口_多态
- Java面向对象程序设计之接口运用
- 黑马程序员-JAVA面向对象之抽象、接口、多态
- Java面向对象高级--抽象类与接口的应用
- JAVA面向对象特性与接口(上)
- 黑马程序员----java面向对象03(接口、多态)
- Java面向对象程序设计之接口应用
- Java面向对象高级--接口的基本概念--------interface、implements
- Java基础4_面向对象下4接口和匿名类
- 类实现java面向对象上:接口