黑马程序员_java基础之面向对象(二)
来源:互联网 发布:淘宝备注怎么备注 编辑:程序博客网 时间:2024/05/22 04:03
------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
这篇主要想写下面向对象中的继承和多态。
继承
继承的格式:
class 子类名 extends 父类名 {}
继承的特点:
a: 在java语言中只支持单继承,不支持多继承 , 但是支持多层继承
继承的注意事项:
a: 子类只能继承父类非私有的成员
b: 子类不能继承父类的构造方法,但是可以使用super访问
c: 不能为了某一个功能去使用继承
那么什么时候使用继承呢?
继承其实体现的是一种"is a"的关系 .
举例:
水果
香蕉
苹果
继承中的成员访问特点:
成员变量:
变量的访问遵循的是"就近原则"
查找顺序:
a: 在子类的局部位置查找
b: 在子类的成员位置查找
c: 在父类的成员位置查找
d: 就报错啦
this和super的访问格式:
this表示的是本类对象的引用,谁调用我方法中的this就带表谁
super: 是父类存储空间的一个标示(可以理解为父类对象的引用) ;
成员变量的格式:
this.变量名 本类的成员变量
super.变量名 父类的成员变量
成员方法的格式:
this.方法名(...) 本类的成员方法
super.方法名(...)父类的成员方法
构造方法的格式:
this(...) 本类的其他的构造方法
super(...) 父类的构造方法
构造方法:
子类的构造方法都要去访问父类的无参的构造方法 , 其实每一个构造方法的第一行是super()
Object 类: 是所有类的根类 , 所有的类都直接或者间接的继承自该类
如果父类中没有无参的构造方法,那么子类如何进行初始化?
解决方案:
a: 在父类中添加一个无参的构造方法
b: 可以使用super来访问父类中有参的构造方法
c: 可以使用this关键字方法本类其他的构造方法,但是其他的构造方法需要使用super显式的访问父类有参的构造方法
成员方法:
查找顺序:
a: 在子类中查找
b: 在父类中查找
c: 就报错啦
方法重写与方法重载的区别
方法重写: 在子中出现了和父类中一模一样的方法(方法名 , 参数列表 , 返回值类型) , 这种想象就是方法重写
方法重载: 在一个类中, 允许同时存在一个以上的同名方法,只要它们的参数列表不同,和返回值无关
参数列表不同:
参数的个数不同
参数的类型不同
Overload
Override
final关键字
final是一个状态修饰符:表示的意思是:最终的
final的特点:
final可以用来修饰类 , 变量 , 方法
被final修饰的类不能被子类继承
被final修饰的变量其实是一个常量, 不能被重新赋值
final Student s = new Student() ;// final修饰的是引用数据类,指的是地址值不能发生改变
被final修饰的方法不能被子类重写
多态(动态绑定机制)
多态的概述
多态: 同种事物在不同时刻表现出来的多种状态
前提:
a: 需要有继承关系
b: 需要有方法重写,其实没有方法重写,也是可以的,但是没有意思
c: 需要有父类的引用指向子类对象
父 f = new 子() ;
多态的成员访问特点:
成员变量:
编译看左边 , 运行看左边
构造方法:
子类在初始化的时候,都会去访问父类的无参的构造方法
成员方法:
编译看左边 , 运行看右边
静态的成员方法:
编译看左边 , 运行看左边
多态的好处和弊端
好处
a:提高了代码的复用性(靠继承保证)
b:提高了代码的扩展性 (把父类作为参数传递)
class Animal {
public void eat() {}
}
class Cat extends Animal {
public void eat() {}
}
class Dog extends Animal {
public void eat() {}
public void run() {}
}
class Test {
public void show(Animal a) {
a.eat() ;
}
}
弊端:
不能访问子类特有的功能
Animal a = new Dog() ;// 向上转型
如果我们想访问子类特有的功能,那么需要使用向下转型
向下转型的格式:
子类名 对象名 = (子类名)父类的引用 ;
Dog d = (Dog)a ;
- 黑马程序员_java基础之面向对象(二)
- 黑马程序员_Java基础_面向对象(二)_06
- 黑马程序员_java基础之面向对象(一)
- 黑马程序员_java基础之面向对象(三)
- 黑马程序员_java基础复习二面向对象
- 黑马程序员_java基础篇之面向对象
- 黑马程序员_Java基础Day05_面向对象之封装(Done)
- 黑马程序员_Java基础Day07_面向对象之继承(Done)
- 黑马程序员_java基础篇之面向对象(1)
- 黑马程序员_java基础篇之面向对象(2)
- 黑马程序员_java基础篇之面向对象(3)
- 黑马程序员_java基础篇之面向对象(4)
- 黑马程序员_java基础之面向对象封装及继承
- 黑马程序员_Java基础面向对象之继承
- 黑马程序员_java面向对象<二>
- 黑马程序员_Java基础_面向对象
- 黑马程序员_Java基础面向对象_01
- 黑马程序员_JAVA面向对象基础
- 循环链表的有趣遍历
- MSSQL Server的连接问题分析和解决(1)
- 9.12测试(一)——应用程序一运行就崩溃,且每次崩溃的位置都不一样
- 使用WinDbg获得托管方法的汇编代码
- Ubuntu下QTE的安装
- 黑马程序员_java基础之面向对象(二)
- hdu4280 Island Transport 最大流模板Dinic算法
- 【十二】初探继承
- 门户站收录不好怎么办?ccxtqj
- 内存、栈、堆的一点小总结 《程序员的自我修养》·笔记
- 修改数据库语言设置
- ActiveMq-Queue开发
- svm算法入门
- UINavigatonController遮挡内容