面向对象—09—继承、final关键字
来源:互联网 发布:淘宝店铺怎样引流量 编辑:程序博客网 时间:2024/06/05 18:12
/*
继承:is a
1,提高了代码的复用性
2,让类与类之间产生了关系,有了这个关系才有了多态的特性
注意:千万不要为了获取其他类的功能,简化代码而继承。
必须是类与类之间有所属关系才可以继承,
Java语言中:java只支持单继承,不支持多继承。
因为多继承容易带来安全隐患:当多个父类中定义了相同
功能,当功能不同时,不确定要运行哪一个。
例:
class A
{
void show()
{
System.out.println("a");
}
}
class B
{
void show()
{
System.out.println("b");
}
}
class C extend A, B
{ }
C c = new C();
c.show();//不知道运行哪个show
java支持多层继承,也就是一个继承体系
如何使用一个继承体系中的功能呢?
想要使用体系,先查阅体系父类的描述,因为父类中定义的
是该体系中共性功能。通过了解共性功能,就可以知道
该体系的基本功能。
那么这个体系已经基本可以使用了。
那么在具体调用时,要创建最子类的对象,为什么呢?
1,因为有可能父类不能创建对象
2,创建子类对象可以使用更多功能,包括基本的,也包括特有的
简单一句话:查阅父类功能,创建子类对象使用功能。
聚集:has a
聚合:球队的球员
组合(更紧密):手是人的一部分
*/
------------------------------------------------------------------------------------------------------
/*
子父类出现后,类成员的特点:
类中的成员:
1,变量
如果子类中出现非私有的同名成员变量时,
子类要访问本类中的变量,用this
子类要访问父类中的同名变量,用super
2,函数
3,构造函数
*/
class Fu
{
int num = 4;
}
class Zi extends Fu
{
int num = 5;
public void show()
{
System.out.println(super.num);//输出父类
}
}
class ExtendsDemo2
{
public static void main(String[] args)
{
Zi z = new Zi();
z.show();
System.out.println(z.num+"..."+z.num);
}
}
----------------------------------------------------------------------------------------------
/*
记住:
重载:只看同名函数的参数列表
重写:子父类方法要一模一样
*/
class Fu
{
void show()
{
System.out.println("fu show");
}
private void speak()
{
System.out.println("vb");
}
}
class Zi extends Fu
{
void show()
{
System.out.println("zi show");
}
void speak()
{
System.out.println("java");
}
}
class ExtendsDemo3
{
public static void main(String[] args)
{
Zi z = new Zi();
z.show();
z.speak();
}
}
---------------------------------------------------------------------------------------------------------
/*
3,子父类中的构造函数。
在对子类对象进行初始化时,父类的构造函数也会运行。
那是因为子类的构造函数默认第一行有一条隐式的语句super();
super():
1,会访问父类中空参数的构造函数。而且子类中所有的构造函数默认第一行都是super();
2,如果父类没有空参数的构造函数,那么子类必须在第一行写上super(参数);
为什么子类一定要访问父类中的构造函数?
因为父类中的数据子类可以直接获取,所以子类对象在建立时
,需要先查看父类是如何对这些数据进行初始化的。所以
子类在对象初始化时,要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super
语句的方式来指定。
注意:super语句一定定义在子类构造函数的第一行。
子类的实例化过程。
结论:子类的所有的构造函数,默认都会访问父类中空参数的
构造函数。因为子类每一个构造函数内的第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super语句形式
来指定要访问父类中的构造函数。
当然:子类的构造函数第一行也可以手动指定this语句来访问本类中的
构造函数。子类中至少要有一个构造函数会访问父类中的构造函数。
*/
class Fu //extends Object
{
/*
Fu()
{
//super();
System.out.println("fu run");
}
*/
Fu(int x)
{
//super();
System.out.println("fu run");
}
}
class Zi extends Fu
{
Zi()
{
//super(); //隐含此语句
super(2);
System.out.println("zi run");
}
Zi(int x)
{
//super(); //默认此语句
super(3);
System.out.println("zi..."+x);
}
}
class ExtendsDemo3
{
public static void main(String[] args)
{
Zi z = new Zi();
Zi z1 = new Zi(4);
}
}
--------------------------------------------------------------------------------------------------
/*
final : 最终。作为一个修饰符
当在描述事物时,一些数据的出现值是固定的,那么这时为了
增强阅读性,都给这些值起个名字,方便于阅读,而这个值不
需要改变,所以加上final修饰。
作为常量:常量的书写规范是所有字母都大写,如果有多个单词
组成。单词间通过_连接。例:final MY_PI
为了共享 public static final double PI = 3.14(即全局变量)
内部类定义在类中的局部位置上时,只能访问该局部被final修饰
的局部变量。
*/
--------------------------------------------------------------------------------------------------
个人总结:注意this和super的区别,他们都只能写在构造函数第一行,
注意重载和重写的区别,
- 面向对象—09—继承、final关键字
- 黑马程序员—Java面向对象(单例设计模式、面向对象的继承、final关键字)
- Java面向对象——final关键字
- 黑马程序员———面向对象之继承super和final关键字
- Java基础(面向对象三——继承、final关键字、抽象类、接口)
- 面向对象final关键字
- 面向对象-final关键字
- 面向对象-final关键字
- 面向对象--final关键字
- 黑马程序员-day07-面向对象(继承和final关键字)
- 黑马程序员——第7天——(面向对象)继承,final关键字,抽象类,接口
- 黑马程序员——面向对象特征二:继承,以及super,final,abstract关键字和接口知识
- 黑马程序员——Java基础---面向对象(继承_概述、关键字final、抽象类)(5) 分类: Java学习笔记
- 黑马程序员——面向对象12:final关键字
- php面向对象(OOP)—final关键字
- javaSE-面向对象-final关键字
- java面向对象-final关键字
- day03--面向对象---final关键字
- 【C++ STL学习之六】STL算法之for_each
- Hadoop集群安装&Hbase实验环境搭建【1】
- JAVA 网络编程 UDP(聊天程序)
- ubuntu server 配置ftp server
- Windows Azure地缘组 (Affinity Group)
- 面向对象—09—继承、final关键字
- opencv 笔记03Core_Mask
- rqnoj-394
- android114--文件
- pxa270(Xscale核)的nandflash移植
- 第六周项目二:填空
- oracle initialization or shutdown in progress
- PendingItent
- cocos2d-x初探学习笔记(2)--重要概念及Test例子结构