黑马程序员——多态,继承;抽象类
来源:互联网 发布:域名icp备案查询 编辑:程序博客网 时间:2024/05/16 11:22
------- android培训、java培训、期待与您交流! ----------
多态的作用:
把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。
只修改方法的实现,不必修改方法的声明
继承是多态产生的前提条件;
分类:
编译时多态:方法重载
运行时多态:方法覆写
Eg:package test; class Dog{ void eat(){ System.out.println("一般的狗吃一般的狗粮!"); }} class HashDog extends Dog{ void eat(){ System.out.println("哈士奇吃哈士奇的狗粮!"); }} class ZangAoDog extends Dog{ void eat(){ System.out.println("藏獒吃藏獒的狗粮!"); }} //定义一个动物园喂的方法class Zoo{ void feed(Dog d){ d.eat(); } } public class Demo11 { public static void main(String[] args) { Dog hd = new HashDog(); Dog zd = new ZangAoDog(); Zoo z = new Zoo(); z.feed(hd); z.feed(zd); }}
输出:
哈士奇吃哈士奇的狗粮!
藏獒吃藏獒的狗粮!
抽象类
当编写一个类时,我们往往会为该类定义一些方法,这些方法是用来描述该类的行为方式,那么这些方法都有具体的方法体。
但是有的时候,某个父类只是知道子类应该包含怎么样的方法,但是无法准确知道子类如何实现这些方法。
抽象方法的定义:通过abstract关键字来修饰的类称为抽象类;
我的总结:
抽象类用private修饰,里面可以有用private修饰的方法(没有方法体),强制子类进行覆写;
可以理解为:具有某些公共方法的一个总结类。
可以定义被abstract修饰的抽象方法
抽象方法只有返回类型和方法签名,没有方法体。
备注:
抽象类可以含有普通方法
抽象类不能创建实例对象(不能new)
需要子类覆盖掉所有的抽象方法后才可以创建子类对象,否则子类也必须作为抽象类
列举常见的几个抽象类:
流的四个基本父类
InputStream,OutputStream,Reader,Writer
我的总结:
抽象类是类的一种特殊情况:据有类的一切特点,但是不能实例化;一般的都得带有抽象方法。
抽象类不可以实例化,有时看到的近似实例化是多态机制的体现,并不是真正的实例化。
Eg:Socket s = new Socket();OutputStream os = s.getOutputStream();左边是OutputStream类型变量的声明,右边是获取抽象类OutputStream的一个实例对象! package testDemo2; abstract class Person{} class Student extends Person{} public class Demo2 { public static void main(String[] args) { Person p = new Student();//体现的是多态,父类声明实例化子类对象。而不是抽象类实例化 }}
abstract方法
分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是功能声明相同,但功能主体不同。
那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么此方法就是一个抽象方法。
abstract [非private访问修饰符] 返回值类型 方法名称(参数列表);
抽象方法要存放在抽象类中。
抽象方法也可以存在于接口中
Eg:package reviewDemo; abstract class Person3{ abstract void show(); abstract void inof(); void turn(){ }} class NewP extends Person3{ @Override void show() { } @Override void inof() { } //不覆写的话会报错} public class Demo15 { public static void main(String[] args) { //new Person3();报错!因为抽象类不可以实例化 }}
- 黑马程序员—继承,抽象类
- 黑马程序员——多态,继承;抽象类
- 黑马程序员——继承、抽象类、接口、多态
- 黑马程序员——继承、抽象
- 黑马程序员——继承,抽象,接口
- 黑马程序员——继承,抽象,接口
- 黑马程序员—继承,抽象,接口
- 黑马程序员——继承、抽象、多态、异常
- 黑马程序员——继承、抽象、接口、多态、内部类
- 黑马程序员——继承 抽象 接口 多态
- 黑马程序员——继承,抽象,接口,多态
- 黑马程序员——继承、多态、抽象、接口
- 黑马程序员——继承,抽象类,接口概述
- 黑马程序员——继承、final关键字、抽象类
- 黑马程序员——继承和抽象类
- 黑马程序员—JAVA基础之继承、抽象类、接口
- 黑马程序员————面向对象(继承,抽象类,接口,多态,异常)
- 黑马程序员——java基础——继承、抽象类、接口、多态
- 菜鸟学Java(十六)——Jboss简介
- ipv6 ospf 1 area 0 instance 1的作用
- HDU3299
- linux系统下EXT2/EXT3/EXT4文件系统的数据恢复
- HomeBrew—Mac的利器
- 黑马程序员——多态,继承;抽象类
- 问题记录
- 理解class.forName()
- 第五章 中央处理器笔记简记
- linux下mariadb大小写敏感
- 应用层创建socket,内核模块通过该socket发送数据包
- Libcurl多线程crash问题
- 内存映射文件技术
- 新项目接口的开发