黑马程序员-面向对象之继承
来源:互联网 发布:js选择排序 编辑:程序博客网 时间:2024/05/16 12:52
继承:
class Person
{
Stringname;
Intage;
voiddemo1(){}
}
class Student extends Person
{
}
Student类通过关键字extends继承Person类,Student就具有了父类Person的属性和方法
优点:
1. 提高代码的复用复用性;
2. 让类与类之间产生了关系,有了这个关系,才有了多态的特性;
注意:千万不要为了获取其他类的功能,简化代码而继承。必须是类与类之间有所属关系才可以继承。
Java语言只支持单继承,不支持多继承。以为多继承容易带来安全隐患:当多个父类中定义了相同功能,档功能内容不同时,不确定要运行哪一个。
例如:
class a
{
Voidshow()
{
System.out.println(“a”);
}
}
class b
{
Voidshow()
{
System.out.println(“b”);
}
}
class c extends a,b
{
}
C c = new C();
c.show();//调用show()方法就不知道发音的是a,还是b.
java支持多层继承,也就是集成体系。a继承b,b继承c
如何使用一个集成体系中的功能?
想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中最共性的功能。
通过了解共性功能,就可以知道该体系的基本功能。
在具体调用是要创建最子类的对象,一是因为有可能父类不能创建对象;二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。
简单一句话:查阅父类功能,创建子类对象使用。
子父类中变量的特点:
如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量用this,子类要访问父类中的同名变量用super。
Super的使用和this几乎一致,this代表的是本类对象的引用,super代表的是父类对象的应用。
子父类中函数的特点:
当子类出现和父类一模一样的函数时,当子类对象调用该函数时,会运行子类函数的内容,这种情况是函数的另一种特性:重写(覆盖)。
注意:1.子类覆盖父类,必须保证子类权限大于父类权限,才能覆盖,否则编译失败
2静态只能覆盖静态
子父类中的构造函数:
在对子类对象进行初始化时,父类的构造函数也会运行,那是因为子类的构造函数默认第一行有一条隐式的语句super();super():会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();
子类的所有的构造函数,都会访问父类的空参数的构造函数;
当父类中没有空参数的构造函数时,子类必须手动通过super或者this语句的形式来指定要访问的构造函数。
子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数,子类中至少会有一个构造函数会访问父类中的构造函数。
super语句一定定义在第一行.。
final关键字
1. 可以修饰类,函数,变量。
2. 被final修饰的类不可以被继承。
3. 被final修饰的方法不可以被复写。
4. 被final修饰的变量是一个常量只能赋值一次,既可以修饰成员变量,也可以修饰局部变量。
5. 内部类定义在类中的局部位置上时,只能访问该局部被final修饰的局部变量。
抽象类
特点:
1. 抽象方法一定定义在抽象类中;
2. 抽象方法和抽象类必须被abstract关键字修饰;
3. 抽象类不可以用new创建对象,因为调用抽象方法没意义;
4. 抽象类中的方法要被使用,必须有子类复写所有的抽象方法后,建立子类对象调用。
如果子类只覆盖了部分抽象方法,那么该子类还是一个抽象类。
abstract class Student{
abstractvoid study();
}
class Student1 extends Student{
voidstudy(){}
}
Class Student2 extends Student{
Voidstudy(){}
}
模板方法模式:
在定义功能时,功能的一部分是确定的,但是有一部分是不确定,而确定的部分在使用不确定的部分,那么这时将不确定的部分暴漏出去,有该类的子类完成。
abstract class GetTime{
publicfinal void getTime()
{
longstart = System.currentTimeMillis();
runcode();
longend = System.currentTimeMillis();
System.out.println(end-start);
}
public abstractvoid runcode();
}
class SubTime extends GetTime()
{
publicvoid runcode()
{
for(intx =0;x<3000;x++)
System.out.println(x);
}
}
- 黑马程序员:面向对象之-----继承
- 黑马程序员-面向对象之继承
- 黑马程序员_面向对象之继承
- 黑马程序员--面向对象之二:继承
- 黑马程序员-JAVA面向对象之继承
- 黑马程序员-C#面向对象之继承
- 黑马程序员__面向对象之继承
- 黑马程序员------面向对象之继承
- 黑马程序员_面向对象之继承
- 黑马程序员@java面向对象之继承
- 黑马程序员-面向对象-继承
- 黑马程序员--面向对象(继承)
- 黑马程序员 面向对象--->继承
- 黑马程序员------面向对象之封装 继承 多态
- 黑马程序员_面向对象之继承和接口
- 奋斗黑马程序员----面向对象之继承小结
- 黑马程序员--java面向对象之继承封装多态
- 黑马程序员——面向对象之继承学习笔记
- win32 API &winsock & c++架构实现仿QQ聊天室
- 【学习笔记-01】cocos2d-x 模板在Xcode中的安装与卸载
- [转]python对XML的解析
- 使用 Spring Data JPA 简化 JPA 开发
- 心理学的166个现象---之三
- 黑马程序员-面向对象之继承
- 心理学的166个现象---之四
- 散列表(哈希hash)初步
- 使用 Java 配置进行 Spring bean 管理
- 心理学的166个现象---之五
- 剑指offer:5-从尾到头打印链表
- 心理学的166个现象---之六
- AsyncTask中关于线程的问题
- Linux多线程编程