Java基础 - 面向对象(6) : 接口

本文详细介绍了Java接口的概念、特点及使用方式,并通过猫狗、师生等案例展示接口的应用场景,帮助理解接口与抽象类的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 接口的引入

  • 回顾猫狗案例,它们仅仅提供一些基本功能。 比如:猫钻火圈,狗跳高等功能,不是动物本身就具备的,是在后面的培养中训练出来的,这种额外的功能,java提供了接口表示。

2. 接口的特点

  • A. 接口用关键字interface修饰

    interface 接口名 {}

  • B. 类实现接口用implements修饰

    class 类名 implements 接口名 {}

  • C. 接口不能实例化

  • D. 接口的实现类

    a : 是一个抽象类。
    b : 是一个具体类,这个类必须重写接口中的所有抽象方法。

3. 接口的成员特点

  • 接口名 + Impl这种格式是接口的实现类格式

    class InterImpl implements Inter { }

  • A. 成员变量 : 只能是常量,并且是静态的。

    默认修饰符:public static final 建议自己手动给出

  • B. 构造方法 :没有构造方法,因为主要是扩展功能的,而没有具体存在。

  • C. 成员方法 :只能是抽象的

    默认修饰符:public abstract 建议自己手动给出

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

  • A. 类与类

    继承关系,只能单继承,可以多层继承

  • B. 类与接口

    实现关系,可以单实现,也可以多实现。
    还可以在继承一个类的同时,实现多个接口

  • C. 接口与接口

    继承关系,可以单继承,也可以多继承

interface Father {
	public abstract void show();
}

interface Mother {
	public abstract void show2();
}

interface Sister extends Father,Mother {

}

//class Son implements Father,Mother // 多实现
class Son extends Object implements Father,Mother {
	public void show() {
		System.out.println("show son");
	}
	
	public void show2() {
		System.out.println("show2 son");
	}
}

class InterfaceDemo3 {
	public static void main(String[] args) {
		
		Father f = new Son();
		f.show();
		//f.show2(); // 报错
	
		Mother m = new Son();
//		m.show();  // 报错
		m.show2();
	}
}

5. 抽象类和接口的区别

  • A. 成员区别

    a. 抽象类:

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

    b. 接口:

    成员变量:只可以常量
    成员方法:只可以抽象

  • B. 关系区别

    a. 类与类:继承,单继承

    b. 类与接口:实现,单实现,多实现

    c. 接口与接口:继承,单继承,多继承

  • C. 设计理念区别

    a. 抽象类被继承体现的是:" is a " 的关系。抽象类中定义的是该继承体系的共性功能。比如所有人都有姓名、年龄;都会吃饭、睡觉;但不一定都抽烟、喝酒。

    b. 接口被实现体现的是:" like a " 的关系。接口中定义的是该继承体系的扩展功能。而上述的抽烟、喝酒功能,我们就用接口来实现。

6. 猫狗案例加入跳高功能

interface Jumpping {
	
	public abstract void jump();
}


abstract class Animal {
	
	private String name;
	
	private int age;
	
	public Animal() {}
	
	public Animal(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	
	public abstract void eat();
	
	
	public void sleep() {
		System.out.println("困了都得睡觉");
	}
}


class Cat extends Animal {
	public Cat(){}
	
	public Cat(String name,int age) {
		super(name,age);
	}
	
	public void eat() {
		System.out.println("猫吃鱼");
	}
}


class Dog extends Animal {
	public Dog(){}
	
	public Dog(String name,int age) {
		super(name,age);
	}
	
	public void eat() {
		System.out.println("狗啃骨");
	}
}


class JumpCat extends Cat implements Jumpping {
	public JumpCat() {}
	
	public JumpCat(String name,int age) {
		super(name,age);
	}

	public void jump() {
		System.out.println("跳高猫");
	}
}


class JumpDog extends Dog implements Jumpping {
	public JumpDog() {}
	
	public JumpDog(String name,int age) {
		super(name,age);
	}

	public void jump() {
		System.out.println("跳高狗");
	}
}

class InterfaceTest {
	public static void main(String[] args) {
		
		JumpCat jc = new JumpCat();
		jc.setName("哆啦A梦");
		jc.setAge(3);
		System.out.println(jc.getName()+"---"+jc.getAge());
		jc.eat();
		jc.sleep();
		jc.jump();
		System.out.println("-----------------");
		
		JumpCat jc2 = new JumpCat("大力肥猫",2);
		System.out.println(jc2.getName()+"---"+jc2.getAge());
		jc2.eat();
		jc2.sleep();
		jc2.jump();
		
		
	}
}

7. 老师学生案例加入抽烟功能

interface Smoking {
	
	public abstract void smoke();
}


abstract class Person {
	
	private String name;
	
	private int age;
	
	public Person() {}
	
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	
	public abstract void eat();
	
	
	public void sleep() {
		System.out.println("是人都得睡觉");
	}
}


class Teacher extends Person {
	public Teacher() {}
	
	public Teacher(String name,int age) {
		super(name,age);
	}
	
	public void eat() {
		System.out.println("老师大吃红烧肉");
	}
}


class Student extends Person {
	public Student() {}
	
	public Student(String name,int age) {
		super(name,age);
	}
	
	public void eat() {
		System.out.println("学生狂撸羊肉串");
	}
}


class SmokingTeacher extends Teacher implements Smoking {
	public SmokingTeacher() {}
	
	public SmokingTeacher(String name,int age) {
		super(name,age);
	}

	public void smoke() {
		System.out.println("抽烟的老逼灯");
	}
}


class SmokingStudent extends Student implements Smoking {
	public SmokingStudent() {}
	
	public SmokingStudent(String name,int age) {
		super(name,age);
	}

	public void smoke() {
		System.out.println("抽烟的小B崽");
	}
}

class InterfaceTest2 {
	public static void main(String[] args) {
		
		SmokingStudent ss = new SmokingStudent();
		ss.setName("徐康健");
		ss.setAge(28);
		System.out.println(ss.getName()+"---"+ss.getAge());
		ss.eat();
		ss.sleep();
		ss.smoke();
		System.out.println("-------------------");
		
//		SmokingStudent ss2 = new SmokingStudent("德子",30);
		SmokingTeacher st = new SmokingTeacher("德子",30);
		System.out.println(st.getName()+"---"+st.getAge());
		st.eat();
		st.sleep();
		st.smoke();
		
		
	}
}

8. 运动员和教练案例

  • 分析
    在这里插入图片描述
  • 代码实现
interface SpeakEnglish {
	
	public abstract void speak();
}


abstract class Person {
	private String name;
	private int age;
	
	public Person() {}
	
	public Person(String name,int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
	
	
	public void sleep() {
		System.out.println("是人困了都得睡觉");
	}
	
	
	public abstract void eat();
}


abstract class Player extends Person {
	public Player() {}
	
	public Player(String name,int age) {
		super(name,age);
	}
	
	
	public abstract void study();
}


abstract class Coach extends Person {
	public Coach() {}
	
	public Coach(String name,int age) {
		super(name,age);
	}
	
	
	public abstract void teach();
}


class PingPangPlayer extends Player implements SpeakEnglish {
	public PingPangPlayer(){}
	
	public PingPangPlayer(String name,int age) {
		super(name,age);
	}
	
	
	public void eat() {
		System.out.println("乒乓球运动员在乒乓桌上吃火锅");
	}
	
	
	public void study() {
		System.out.println("乒乓球运动员练习打乒乓球");
	}

	@Override
	public void speak() {
		System.out.println("乒乓球运动员讲英语");
		
	}
	
	
//	public void speak() {
//		System.out.println("乒乓球运动员讲英语");
//	}
}


class BasketballPlayer extends Player {
	public BasketballPlayer(){}
	
	public BasketballPlayer(String name,int age) {
		super(name,age);
	}
	
	
//	public void eat() {
//		System.out.println("不重写会报错哦亲");
//	}
	
	
	public void study() {
		System.out.println("篮球运动员打全场");
	}

@Override
public void eat() {
	System.out.println("篮球运动员吃炸鸡");
	
}

}


class PingPangCoach extends Coach implements SpeakEnglish {
	public PingPangCoach(){}
	
	public PingPangCoach(String name,int age) {
		super(name,age);
	}
	
	
	public void eat() {
		System.out.println("刘国梁在乒乓球桌子上吃汉堡");
	}
	
	
	public void teach() {
		System.out.println("刘国梁教队员打乒乓球");
	}
	

	public void speak() {
		System.out.println("刘国梁面壁练口语");
	}
}


class BasketballCoach extends Coach {
	public BasketballCoach(){}
	
	public BasketballCoach(String name,int age) {
		super(name,age);
	}
	
	
	public void eat() {
		System.out.println("李春江吃内蒙大肉串");
	}
	
	
	public void teach() {
		System.out.println("李春江教你骂SB");
	}
}

class InterfaceDemo {
	public static void main(String[] args) {
		
		PingPangPlayer ppp = new PingPangPlayer();
		ppp.setName("马云");
		ppp.setAge(36);
		System.out.println(ppp.getName()+"---"+ppp.getAge());
		ppp.eat();
		ppp.sleep();
		ppp.study();
		ppp.speak();
		System.out.println("----------------");
		
		ppp = new PingPangPlayer("马化腾", 26);
		System.out.println(ppp.getName()+"---"+ppp.getAge());
		ppp.eat();
		ppp.sleep();
		ppp.study();
		ppp.speak();
		System.out.println("----------------");
		
		BasketballPlayer bp = new BasketballPlayer();
		bp.setName("姚明");
		bp.setAge(39);
		System.out.println(bp.getName()+"---"+bp.getAge());
		bp.eat();
		bp.sleep();
		bp.study();
		//bp.speak(); // 没有该方法
		System.out.println("----------------");

		
		PingPangCoach ppc = new PingPangCoach("刘玉栋", 66);
		
		System.out.println(ppc.getName()+"---"+ppc.getAge());
		ppc.eat();
		ppc.sleep();
		ppc.teach();
		ppc.speak();
		System.out.println("----------------");
		
		BasketballCoach bbc = new BasketballCoach();
		bbc.setAge(16);
		bbc.setName("菲董的飞狗");
		System.out.println(bbc.getName() + "------" + bbc.getAge());
		bbc.sleep();
		bbc.eat();
		bbc.teach();

		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值