抽象类和接口
**抽象方法:**在子类继承父类之后,发现有些方法必须要进行重写! 但是如果父类中不编写此方法,就没有办法使用多态调用了,所以必须要写,但是没必要实现,于是成为了抽象。
// 父类
public abstract class Pet{
public abstract void eat(); // 抽象方法没有方法体
}
// 子类
public class Dog extends Pet{
public void eat(){
}
}
// 子类
public class Cat extends Pet{
public void eat(){
}
}
main(){
Pet pet = new Dog(); // 父类的引用指向子类的对象
pet.eat();
}
1. 了解抽象类和普通类的区别
抽象类的特点:
-
抽象类不能被实例化 (实例化:创建对象)
但是抽象类可以作为引用去指向子类的对象。
public abstract class Pet { public abstract void test(); } // 匿名内部类:可以将匿名内部类 理解为 是该类的一个子类(匿名的) 这个东西只能用一次 Pet pet = new Pet() { @Override public void test() { } };
-
抽象类可以有构造方法
它的构造方法是用来帮助子类创建对象的
-
只要有抽象方法存在,这个类就是抽象类。
抽象类中可以有抽象方法,也可以有普通方法。
(“父债子偿”) 一个抽象类里的抽象方法 必须要被其子类重写(实现),如果子类不重写,它也是抽象类。
2. 掌握抽象类和抽象的方法的定义
abstract 抽象的
3. 会定义接口
4. 了解"接口"的含义
接口1:
public class Student{
// 1. 私有化属性
private String name;
// 2. 提供公共的getter/setter接口
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
以后你可能需要给别人编写接口。
**举例:**你要开发一个天气App,不需要自己去花费时间等测量实时天气情况,只需要获取一下国家气象局的提供的天气接口即可。
国家气象局的数据收集到之后,开发GG给你写了一个方法,这个方法可以被你调用。 你只需要按照要求传入指定的参数,即可得到指定的结果!
public String getxx(String 地址,Date 时间,String 你想要的天气数据编号等…){
// 实现与你无关
}
**接口2:**USB接口 电源接口…
接口3: interface
实现一个防盗门的功能。
门类:开门和关门的功能
锁类:开锁和上锁的功能
防盗门 is a 门 所以可以继承门类,拥有了开门和关门的功能。
但是它想拥有开锁和上锁 不能通过继承锁类。 1.防盗门 is not a 锁! 2.Java中是单根继承 只能有一个直接父类。
如果还想拥有锁的功能,这时候就可以使用接口 interface。 防盗门 has a 锁。
继承:找亲爹
实现接口:认干爹
你只能有一个亲爹,你可以有多个干爹。
之所以在Java诞生接口这个概念,其中的原因有:在日趋庞大的系统中,如果将所有的功能都定义在一个类中,那么必然会导致耦合性的加剧,还有扩展性的降低。 所以我们把一些功能进行聚合,放到接口中,未来谁想拥有这些功能直接实现此接口即可。
/**
* 防盗门
* @author Charles7c
* 2019年2月15日 上午9:50:20
*/
public class ThiefDoor extends Door implements Lock,CatEye{
@Override
public void upLock() {
}
@Override
public void downLock() {
}
}
/**
* 门:有开和关
* @author Charles7c
* 2019年2月15日 上午9:50:47
*/
public class Door {
public void open() {
System.out.println("开门");
}
public void close() {
System.out.println("关门");
}
}
/**
* 锁接口
* @author Charles7c
* 2019年2月15日 上午9:58:26
*/
public interface Lock {
// 在接口中编写普通方法 只能是抽象的abstract 公共的public
void upLock();
void downLock();
}
接口的一些注意事项:
- 接口中的普通方法,都是公共的public抽象的abstract
- 接口中的属性 都是公共的public静态static常量final
- 接口中的方法也都需要子类去重写
- 接口不能实例化,也可以编写匿名内部类
- 接口和接口之间可以有继承关系
演示案例:
需求:模拟手机的功能。
手机分为智能机和普通机。手机这个概念就证明它肯定有通话和短信功能。
普通机有的功能:听歌
智能机有的功能:上网冲浪 看视频 打游戏 听歌
智能机类
普通机类
手机类
听歌接口
上网冲浪接口
看视频接口
…