黑马程序员——面向对象(下)— 重写、多态、抽象、接口
来源:互联网 发布:apache ddos ip 大量 编辑:程序博客网 时间:2024/05/18 20:10
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
1、重写和重载
子父类关系中,子类中存在与父类中方法声明完全一样的方法叫重写
一句话:除了方法体以外其他都相同,但是子类修饰符权限要大于等于父类
一个类中或者子父类关系中存在多个同名方法,并且参数列表不同的方法 叫重载。
子父类关系中:子类中的方法和父类中的方法也可以构成重载关系
当子类需要父类的功能,而子类又有自己特有的方法时,可以重写父类的方法,这样既
可以使用父类的功能又可以定义子类特有的内容.
举例:父亲把武功传给儿子,儿子可以改进该武功,或者不改
方法重写:
子父类中,出现方法声明相同的情况。返回值、方法名、参数列表都要一样。
方法重载:
同一个类中或子父类中,方法名相同,参数列表不同,与返回值无关。
(5)子父类间重写需要注意的地方
A:父类中的私有方法不能被重写(就算有相同的,但私有的不能被继承,所以不算重写)
B:子类方法的访问权限修饰符要大于等于父类的访问权限修饰符
C:静态的方法只能重写静态方法
2、子父类间构造方法的执行顺序
(1)子类的构造方法默认都会去访问父类的无参构造方法,子类的构造方法都有默认语句:super()
为什么呢?
因为子类会自动具备父类中非私有数据,那么,这个数据只能靠父类完成。所以会先去调用父类的构造方法对数据进行初始化。
注意:构造方法中this() 或 super()一定要是第一行有效代码.
任何类都直接或间接访问了 Object 类中的构造方法. object 是所有类的超类。
注意:构造方法执行完后会创建该类的对象吗?
不一定,子类的构造方法第一行调用父类的构造方法时,不会创建对象
(3)子父类间静态代码块,代码块,构造方法执行顺序
注意:当创建多个对象的时候静态代码块每次运行只执行一次
class Zi{//静态代码块static{System.out.println("zi 静态代码块");}//构造代码块{System.out.println("zi 构造代码块");}public Zi(){System.out.println("zi 构造方法");}}class BlockCodeDemo{public static void main(String[] args){Zi z = new Zi();Zi z2 = new Zi();}}
初始化静态成员变量
4、构造代码块作用
A、把所有构造方法中共性内容抽取出来,提高代码的复用性
B、初始化非静态成员变量
3、final关键字的概述和使用
(1)概述
很多时候有些方法内容时不能被重写的。而父类方法声明为public就可以被重写。针对这种情况,我们可以做个标记,告诉别人这个不能被重写。
final关键字:最终的意思,可以修饰类,成员变量,成员方法
(1)概念-什么是多态
对象在不同时刻表现出来的不同状态。
A、要有继承关系
B、要有方法重写
C、要有父类引用指向子类对象(Fu fu = new Zi();)
(3)多态的成员特点
(4)多态的弊端与好处
1、父类引用不能直接使用子类对象的特有功能
如何解决这个问题?
答:向下转型 (就是强转)
格式 (子类)父类
2、好处
可以提高代码的扩展性和可维护性。
5、抽象类和抽象方法
(1)抽象类与抽象方法
抽象类:被abstract修饰的类
抽象方法:被abstract修饰,只有方法声明,没有方法体的方法。
(2)抽象类的特点
D、如果一个类继承抽象类,那么这个类要么本身也是抽象类。这个类必须重写父类的所有抽象方法。
(3)抽象类作用
强制子类必须实现某些功能。
(4)抽象类的成员特点
1、成员变量
可以有成员变量,也可以有常量。
2、构造方法
有构造方法,但是不能通过构造方法创建对象
问:既然不能被实例化,那么有构造方法有什么用?
答:可以用于子类访问父类数据前,对父类数据进行初始化。
3、成员方法
A、可以有抽象方法,也可以有非抽象方法。
B、非抽象方法和抽象方法的作用
抽象方法是为了要求子类做某些事情。
非抽象方法是为了提高代码复用性,被子类继承。
Final :被final修饰的方法不能被重写,而抽象方法最终都是要被重写的
Static :如果一个类被static修饰,方法可以被类名.方法名直接调用
Private:被 private 修饰的方法在子类中是看不见,所以这个抽象方法也是不能被重写的.
6、接口
特殊的抽象类,里面的方法全是抽象方法。
A、成员变量:接口中只有常量。(变量有默认的修饰符:public static final.)
B、成员方法:接口中的方法都是抽象的。(方法有默认修饰符public abstract)
interface Animal{public abstract void eat();}class Dog implements Animal{public void eat(){System.out.println("eat dog");}}class InterfaceDemo {public static void main(String[] args) {//错误//Animal a = new Animal();Dog d = new Dog();d.eat();//接口多态Animal a = new Dog();a.eat();}}
(4)抽象类和接口的区别,类和接口的关系
1、抽象类和接口的区别
抽象类:
成员变量:可以是变量,也可以是常量。
成员方法:可以是抽象方法,也可以是非抽象方法。
构造方法:有构造方法。
接口:
成员变量:只能是常量。有默认修饰符:public static final
成员方法:只能是抽象方法。有默认修饰符:public abstract
构造方法:没有构造方法,不需要初始化数据。
2、类与接口的关系
类与类:
继承关系,只能单继承,可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
还可以在继承一个类的同时,实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
3、抽象类与接口设计理念的区别
抽象类被继承,这个类中定义的是整个继承体现的共性内容。
体现:is a
接口被实现,这个接口中定义的是整个体现的扩展内容。
体现:like a
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
- 黑马程序员——面向对象(下)— 重写、多态、抽象、接口
- 黑马程序员——面向对象(继承、抽象、接口)
- 黑马程序员——面向对象之抽象类,接口
- 黑马程序员————面向对象(继承,抽象类,接口,多态,异常)
- 黑马程序员——java-面向对象二(继承,多态,抽象,接口,包,内部类)
- 黑马程序员 面向对象(下) 抽象类与接口
- 黑马程序员——面向对象——多态-抽象类-接口
- 黑马程序员—面向对象(static,封装,继承,多态,内部类,抽象类,接口)总结
- 黑马程序员—Java面向对象(抽象类、模板方法设计模式、接口、多态、内部类)
- 黑马程序员——Java面向对象(三)—抽象类、接口
- 黑马程序员 笔记(七)——面向对象(继承、抽象类、接口)
- 黑马程序员_JAVA笔记07——面向对象3(继承、final、抽象类、接口)
- 黑马程序员——java面向对象(二)继承、抽象、接口
- 黑马程序员——java基础(面向对象)抽象、接口、内部类
- 黑马程序员——面向对象(抽象类、接口、内部类)
- 黑马程序员——面向对象07(继承、final、抽象类、模版方法、接口)
- 黑马程序员 — 面向对象(下)
- 黑马程序员—面向对象(下)
- SpringMVC+KindEditor在线编辑器之文件上传
- 用信号量和Posix线程操作来实现双线程高速下载
- mysql存储过程
- 《现代操作系统》精读与思考笔记 第八章 多处理机系统 第九章 安全
- 黑马程序员Java笔记——初识Java
- 黑马程序员——面向对象(下)— 重写、多态、抽象、接口
- 循环 实例
- 黑马程序员
- HDU 1879 继续畅通工程 (克鲁斯卡尔_最小生成树)
- 输出输入的任意整数的二进制存储形式
- ListView的优化(滑动停止才加载数据,首次启动预加载)
- 泛型使用一例子
- 设计算法将1个字符串连接到另外1个字符的后面.
- Hdu 4278 Faulty Odometer(8进制转10进制)