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{
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();
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("我是实现类中得特有方法");
}
}
代码示例
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() {
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() {
return super.toString();
}
@Override
public void eat() {
System.out.println("男人吃饭");
}
@Override
public void earnMoney() {
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() {
return super.toString();
}
@Override
public void eat() {
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())
}
}
运行结果:
刘亦菲
姓名: 刘亦菲
姓名: 刘亦菲
整容变得更好看
我要努力挣钱 换个 女朋友
姓名: 刘亦菲