***十四抽象类和接****
书山有路勤为劲,学海无涯苦作舟,我们一起学习
一、抽象方法
学习是枯燥,字体颜色好看了可能你就没有心思学习了
1.抽象方法:在子类继承父类之后,发现有些方法必须要进行重写!但是如果父类中不编写此方法,就没有办法使用多态进行调用了,所以在父类中必须要进行方法的编写,但是没有必要进行实现,所以就撑了抽象的方法。
//父类
public abstract class Pet(){
public abstract void eat();//抽象的方法没有方法体
}
//子类
public class Dog extends Pet(){
public void eat(){
System.out.println("狗吃骨头!");
}
}
//子类
public class Cat extends Pet(){
public void eat(){
System.out.println("猫吃鱼");
}
//测试类
main(){
Pet pet = new Dog()//父类的引用指向了子类的对象
pet.eat();
}
}
二、了解抽象类和普通类的区别
1.抽象类的特点
抽象类不能被实例化(没有办法去new一个对象)
但是抽象类可以以做为引用去指向子类的对象。
public abstract class Pet{
//有抽象方法的类必须是抽象类
public abstract void test();
//匿名内部类:可以将匿名内部类理解为是该类的一个子类(匿名的)这个匿名类智能用一次。
Pet pet = new Pet(){
@Override
public void test(){}
}
}
2.抽象类可以有构造方法
它的构造方法是用来帮助子类构造对象用的
3.只要有抽象方法存在,这个类就是抽象类
抽象类中可以有抽象的方法,也可以有普通的方法。
(父债子偿)一个抽象类里面的抽象的方法,必须要被其子类重新编写实现,如果子类不重写。那么子类也就是抽象类。
三、了解“接口”接口的含义
接口有一下三种的理解让我们一起认识一下
1.接口:
public class Student{
//1.属性私有化
private String name;
//2.提供共有的setter/getter方法
public void setName(String name ){
this.name = name;
}
public String getName(){
return name;
}
}
经过我们以后学习,我们很有可能去给别人去编写接口。
```
*举例说一下:假如我们自己要编写一个APP的天气预报,不需要我们来自己花费时间来测量天气情况,只需要我们获取一下国建气象局提供的天气接口即可。*
public String getWheather (String 地址,Date 时间,还有你想要的天气数据编号或者你向需要的信息..){
//具体的实现与你无关
}
2.接口:USB接口,电源的接口
3.接口:interface
举例说明一下:
实现一个防盗门的功能,
门类:门有开和关的功能
锁类:开锁和上锁的功能
防盗门is a 门,所以可以继承门类。防盗门继承了门就有了门的开门和关门的功能,
但是防盗门想要拥有开锁和上锁的功能,就不能通过继承锁了,原因①防盗门is not a 锁,②Java中是单根继承,只能有一个直接父类。
如果我们的防盗门还想拥有开锁和上锁的功能,这时候我们就可以使用interface。 防盗门has a 锁
继承:找亲爹
实现接口:就是认干爹
你通俗的讲就是你可以有且只有一个亲爹,但是你可以有多个干爹
之所以在Java诞生接口这个概念,其中的原因有:在我们日趋庞大的系统中,如果将所有的功能都定义在一个类中,那么必然会导致耦合性的加剧,还有扩张性的降级,所以我们把一些能进行聚合,放到接口中,未来谁想拥有这些功能就直接去实现这些接口就行,
/**
*防盗门
*/
public class ThiefDoor extends Door implements Lock,CatEyes{
@Override
public void upLuck(){
System.out.print("防盗门正在上锁");
}
@Override
public void downLuck(){
System.out.print("防盗门正在解锁");
}
}
/**
*门:有开和关的功能
*/
public class Door{
public void open (){
System.out.print("开门大吉");
}
public void close(){
System.out.print("关门大吉");
}
}
/**
*锁接口
*/
public interface Lock{
//在接口中编写的普通方法,只能是抽象的abstract 公共的public
void upLock();
void downLock();
}
四、接口中的一些注意的事项
①接口中的普通方法,都是公共的抽象的public abstrac 修饰的
②接口中的属性都是公共的静态的常量,必须赋值初始值,赋值以后就不能更改。public static final修饰
③接口中的方法也需要子类去进行重写编写
④接口不能被实例化,但是可以编写匿名的内部类
⑤接口和接口之间可以有继承关系
五、实践案例
模拟手机的功能
1。我们知道手机可以分为只能手机和普通手机,手机这个概念就证明他肯定有通话和发短信的功能。
2.普通手机有的功能:打电话和收发短信,听音乐
3.智能手机有的功能:打电话和收发短信。听音乐,上网冲浪,看视频,打游戏,
根据需求我们可以分析以下的类
①手机类父类,可以在其中来进行手机的属性私有化,进行品牌,类型,或者其他你想设置的属性。编写一个方法来实现手机的简单的介绍
②普通手机类,来继承手机的基本功能,然后进行接口的实现。
③智能手机类,来继承手机的基本功能,然后实现智能手机想要有的接口。
④接口有音乐接口,看视频接口,上网冲浪接口....后续你想加功能可以直接进行编写接口来进行实现
⑤最后写一个测试类来进行普通手机和智能手机的功能实现