1.1. 抽象类的使用
点击查看视频讲解
1.1.1. 抽象类不能实例化,只能由子类继承
抽象类不能创建对象,因为抽象类中有抽象的函数;如果可以创建对象,就可以通过对象调用抽象的函数;而调用抽象的函数是没有意义的;
![](http://kuaixueit.com/wp-content/uploads/bbs_files/image/20190422/1555914721456877.png)
1.1.1. 子类继承抽象父类,必须实现父类的所有抽象函数,否则子类也是抽象的
子类继承抽象父类,子类中就把父类的抽象函数也继承下来了;如果不重写这些抽象函数,就说明子类中也有抽象函数,所以子类就要定义为抽象类;
如果子类需要被实例化,就不能定义为抽象类,就不能有抽象函数,就必须在子类中将从父类继承下来的抽象函数重写一下;
![](http://kuaixueit.com/wp-content/uploads/bbs_files/image/20190422/1555914741557113.png)
1.1.1. 抽象类的使用方法
一般开发中,会先定义共同的父类,然后根据具体需求,去书写子类;
如果有些功能在开始不确定如何书写,那么就应该定义为抽象函数,交给子类去实现;
需求:编写程序,模拟手机使用网络信号(NetworkSignal)打电话的功能;;
注意:联通手机(UnicomMobile)和移动手机(MobilePhone)使用的网络不同,所以具体实现也会有不同;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | public class AbstractTest { public static void main(String[] args) { new UnicomMobile().call( "18888888888" ); new MobilePhone().call( "18666886688" ); } } /* * 需求:编写程序,模拟手机使用网络信号(NetworkSignal)打电话的功能;; 注意:联通手机(UnicomMobile)和移动手机(MobilePhone)使用的网络不同,所以具体实现也会有不同; * */ abstract class Phone{ //定义一个获取网络的方法 public abstract String getNet(); public void call(String num) { String net = getNet(); System.out.println( "使用" +net+ "网络,给" +num+ "打电话!" ); } } //定义一个移动手机,可以使用移动网络 class MobilePhone extends Phone{ public String getNet() { return "移动" ; } } //定义一个联通手机,可以使用联通网络 class UnicomMobile extends Phone{ public String getNet() { return "联通" ; } } |