Java基础(十四)接口与多态

接口

概述:java语言给我们提供了一种机制,用于处理继承单一的局限性的,接口
接口:接口是一个比抽象类还抽象的类,接口里面所有的方法全是抽象类,接口和类的关系是实现(interface)

接口成员的特点:
只能有抽象方法
只能有(public static final修饰成员变量)常量
默认使用public&abstract修饰方法
建议:大家手动给上默认修饰符
注意:接口不能创建对象(不能实例化)
类与接口的关系是实现关系,一个类实现接口必须实现它所有的方法

类与接口之间的各种关系
类与类:继承关系,单一继承,多层继承
类与接口:实现关系,多实现
接口与接口之间的关系:继承关系,多继承

接口的优点
1.类与接口的关系:实现关系,而且是多实现,一个类可以实现多个接口,类与类之间是继承关系,java中的继承是单一继承,一个类只能有一个父类,打破了继承的局限性
2.对外提供规则
3.降低了程序的耦合性(可以实现模块化开发,定义好规则,每个人实现自己的模块,提高了开发的效率)

接口与抽象类的区别
共性:不断的抽取,抽取出抽象的概念
区别1:与类的关系
类与接口是实现关系,而且是多实现,一个类可以是先多个接口
类与抽象类是继承关系,java中的继承是单一继承,一个类只能有一个父类,java中的继承是多层继承
区别2:成员
成员变量:抽象类可以有成员变量,也可以有常量
接口只能有常量
成员方法:
抽象类可以有抽象方法,也可以有非抽象方法
接口只能有抽象方法,而且方法有默认修饰符public abstract
构造方法:抽象类有构造方法
接口没有构造方法

运动员案例
篮球运动员和教练
乒乓球运动员和教练
现在篮球运动员和教练要出国访问,需要学习英语
请根据你所学的知识,分析出来那些是类,哪些是抽象类,哪些是接口

分析:由下至上 不断抽取的过程
实现:由上至下 先实现共性
使用:使用具体的子类

分析

public static void main(String[] args) {
	//创建篮球运动员对象
	Basketball bb=new Basketball();
	bb.name="杜兰特";
	bb.age=18;
	bb.gender="男";
	bb.speak();
	//创建乒乓球对象
	Pingpang pp=new Pingpang();
	pp.name="张继科";
	pp.age=22;
	pp.gender="男";
	pp.eat();
}
}
class People{
	String name;
	int age;
	String gender;
	
	public void People() {
		
	}
	public void People(String name,int age, String gender) {
		this.name=name;
		this.age=age;
		this.gender=gender;
	}
	public void eat() {
		System.out.println("吃饭");
	}
	public void sleep() {
		System.out.println("睡觉");
	}
}
abstract class Athlete extends People{
	public abstract void study();
}
abstract class Coach extends People{
	public abstract void teach();
	
}
class Pingpang extends Athlete{

	@Override
	public void study() {
		System.out.println("学习抽球");
		
	}
	
}
class Basketball extends Athlete implements  SpeakEnglish{

	@Override
	public void study() {
		System.out.println("学习扣篮");
		
	}

	@Override
	public void speak() {
		System.out.println("说英语");
		
	}
	
}
class Bask_coach extends Coach implements SpeakEnglish{

	@Override
	public void teach() {
		System.out.println("教扣篮");
		
	}

	@Override
	public void speak() {
		System.out.println("说英语");
		
	}
	
}
class Pinp_coach extends Coach{

	@Override
	public void teach() {
		System.out.println("教抽球");
		
	}
	
}
interface SpeakEnglish{
	public abstract void speak() ;

}

匿名对象:没有名字的对象(匿名对象,没有变量引用的对象)new 类名();
匿名对象的应用场景:当方法只调用一次的时候可以使用匿名对象
可以当作参数传递,但无法在传参之前做其他的事情
注意:匿名对象可以调用成员变量并赋值,但是赋值并没有意义
final的概述和作用
修饰符,可以用于修饰类、成员方法和成员变量
final修饰的类不能被继承,不能有子类
final修饰的方法:最终方法,不能被重写
final修饰的变量:不能被修改,是常量
常量:
字面值常量 1,2,3
自定义常量:被final所修饰的成员变量,一旦初始化不可被改变
注意:自定义常量必须初始化可以 显示初始化;构造初始化

多态的概述
多态的前提:子父类的继承关系
方法的重写
父类引用指向(=)子类对象
动态绑定:运行期间调用的方法,是根据其具体类型的方法

animal a=new cat();
	a.eat();
}
}
class animal{
	public void eat() {
		System.out.println("吃东西");
	}
}
class cat extends animal{
	public void eat() {
		System.out.println("猫吃鱼");
	}
}

多态的成员特点:
成员变量(编译时看的左边,运行时看的左边)
成员方法(编译时看的是左边,运行时看右边)
静态方法(使用变量去调用静态方法,其实相当于变量类型的类名去调用 编译时看的是左边,运行时还是左边)

多态中的向上转型和向下转型:
引用类型之间的转换
向上转型 由小到大(子类型转换到父类型)
向下转型 由大到小(父类型转换到子类型)强制转换
基本数据类型的转换
自动类型转换
由小到大
强制类型转换
由大到小

多态的优缺点:
缺点:无法直接访问子类特有的成员
优点:可以提高可维护性(多态前提保证的),提高代码的可扩展性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值