Java基础笔记(十九)——抽象类abstract
抽象类作为父类,不能实例化自己类型的对象,但可以通过向上转型实例化子类对象。
public abstract class Animal{ }
比如eat(); ,每个动物子类都应有自己的方法,那Animal类的eat()方法是无用的。就可以把Animal类定义为abstract。
Animal animal=new Animal(); //定义为abstract的Animal类,此句会编译错误,不能实例化,可以对下一句虽然语法对,但实际逻辑来说无用的方法调用起到提示作用
animal.eat();
这样就可以了:
Animal cat=new Cat();
cat.eat();
Animal dog=new Animal();
dog.eat();
所以abstract应用场景:父类只写子类应包含哪些方法,但具体实现由多个子类自己去写,避免无意义父类的实例化,也避免子类设计的随意性。
在实际编程中,可能会有很多子类应该调用自己重写的方法,如果忘写某个方法,已经定义了abstract的父类,会编译出错提示子类要实现某个抽象方法。
父类中要有子类自己实现的抽象方法,无方法体,是一条声明语句。 public abstract void eat();
同时,子类必须去实现这个抽象方法,否则编译错误,或者视为继承了父类的抽象方法,将子类也写成抽象类。
类中有抽象方法,此类必为抽象类,但抽象类里可以有非抽象方法。
static、final、private都是无法被子类重写的修饰符,所以不能与abstract共存。
用接口实现没有共同父类,却有着共同行为的类。实现接口的类中要实现接口中的抽象方法。
IPhoto ip=new FourthPhone();
ip.phone(); //接口引用指向实现类时,该对象只能调用接口中有的方法,无法访问实现类中自己的方法。
接口定义了某一批类所需遵守的规范,不关心这些类的内部数据,也不关心这些类里方法的实现细节。它只规定这些类里必须提供某些方法。接口访问修饰符:public/默认
public interface INet{
void network(); //接口中抽象方法可以不写abstract关键字,即默认abstract、默认public
}
实现方法的访问修饰符不能低于接口的访问修饰符,所以实现方法会自动加上public。
当类实现接口时,需要去实现接口中的所有抽象方法,否则需要将该类设置为抽象类,谁再继承该类,谁去实现。
public static final int TEMP=20; //接口中可以包含常量,默认是public static final 所以可以直接写int TEMP=20; 必须得初始化赋值
在实现类里调用接口常量,用接口名.常量名 该常量值不能被重新赋值
也可以用接口的引用去指向具体的实现类
INet net=new SmartWatch(); //接口的引用的实现类对象,只能调用接口中定义的方法和Object中的派生方法
net.TEMP 如果实现类中也有同名常量,该方法调用的也是接口中的常量,但通常都用接口名.常量名去调用接口中的常量
若要调用实现类自己的常量,用自己引用类型创建对象,去调用即可。
接口也可以继承,并可继承多个接口,实现了多重继承。接口的实现类,需实现父接口和子接口中所有方法。
最新文章
- C语言末
- 论checkbox和radio的样式美化问题
- linux 命令进阶
- JS——ajax login test
- GDB调试器
- datasorttable表格
- wsdl透明解析
- Servlet 3.0/3.1 中的异步处理
- python多线程限制并发数示例
- mysql 及 posgresql之优劣势大比拼
- css垂直居中方法总结
- JAVA---MYSQL 基本知识点 第二部分
- C#学习笔记-DataTable导出到EXCEL(一)
- 【OpenStack】相关概念
- faster rcnn源码阅读笔记2
- 获取DNS服务器的版本信息
- $.getJSON的缓存问题处理
- Hibernate session FlushMode的五种设置
- Sublime Text 3 个人使用总结
- [Selenium] Java代码获取屏幕分辨率
热门文章
- Shell编程进阶 1.3data命令
- Selenium二次封装-Java版本
- ROS Learning-013 beginner_Tutorials (编程) 编写ROS服务版的Hello World程序(Python版)
- ROS Learning-003 beginner_Tutorials 创建ROS工作空间
- Mind Map-在线软件(转)
- R: 常用操作:
- bzoj4391 [Usaco2015 dec]High Card Low Card
- Luogu 3911 最小公倍数之和
- Django rest framework之序列化小结
- vue 之 模板字符串