java笔记-继承
2015-12-15 17:17
471 查看
继承:
1)提高了代码的复用性
2)让类与类之间产生了关系,有了这个关系,才有了多态的特性
3)java只支持单继承,不支持多继承
子类中成员的特点:
class Fu{
int num=4;
}
class Zi extends Fu{
int num=5;
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
System.out.println(z.num+"......"+z.num);
}
}
结果为:5......5
class Fu{
int num=4;
}
class Zi extends Fu{
int num=5;
void show(){
System.out.println(super.num);
}
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
z.show()
}
}
结果为:4
变量
如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量用this,子类要访问父类中的同名变量用super
class Fu{
void show(){
System.out.println("fu show");
}
}
class Zi extends Fu{
void show(){
System.out.println("zi show");
}
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
z.show()
}
}
结果是:zii show
子父类中的函数:
1)当子类出现和父类一模一样的函数时,子类对象调用该函数会运行子函数的内容,这种是函数的重写(覆盖)
2)子类覆盖父类,必须保证子类权限大于等于父类权限
3)静态函数只能覆盖静态
说明:重载只看同名函数的参数列表,重写的子父类方法要一模一样
子父类中的构造函数
在对子类对象初始化时,父类的构造函数也会运行;那是因为子类的构造函数默认第一行有一条隐式的语句super;super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()
class Fu{
Fu(){
System.out.println("fu show");
}
}
class Zi extends Fu{
Zi(){
System.out.println("zi show");
}
Zi(int x){
System.out.println("zi…"+x);
}
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
Zi z=new Zi(4);
}
}
结果为:
fu show
zi show
zi…4
class Fu{
Fu(int x){
System.out.println("fu show");
}
}
class Zi extends Fu{
Zi(){
super(4);
System.out.println("zi show");
}
Zi(int x){
super(3)
System.out.println("zi…"+x);
}
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
Zi z=new Zi(4);
}
}
结果为:
fu show
zi show
fu show
zi…3
为什么子类一定要访问父类中的构造函数
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的
1)提高了代码的复用性
2)让类与类之间产生了关系,有了这个关系,才有了多态的特性
3)java只支持单继承,不支持多继承
子类中成员的特点:
class Fu{
int num=4;
}
class Zi extends Fu{
int num=5;
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
System.out.println(z.num+"......"+z.num);
}
}
结果为:5......5
class Fu{
int num=4;
}
class Zi extends Fu{
int num=5;
void show(){
System.out.println(super.num);
}
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
z.show()
}
}
结果为:4
变量
如果子类中出现非私有的同名成员变量时,子类要访问本类中的变量用this,子类要访问父类中的同名变量用super
class Fu{
void show(){
System.out.println("fu show");
}
}
class Zi extends Fu{
void show(){
System.out.println("zi show");
}
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
z.show()
}
}
结果是:zii show
子父类中的函数:
1)当子类出现和父类一模一样的函数时,子类对象调用该函数会运行子函数的内容,这种是函数的重写(覆盖)
2)子类覆盖父类,必须保证子类权限大于等于父类权限
3)静态函数只能覆盖静态
说明:重载只看同名函数的参数列表,重写的子父类方法要一模一样
子父类中的构造函数
在对子类对象初始化时,父类的构造函数也会运行;那是因为子类的构造函数默认第一行有一条隐式的语句super;super()会访问父类中空参数的构造函数,而且子类中所有的构造函数默认第一行都是super()
class Fu{
Fu(){
System.out.println("fu show");
}
}
class Zi extends Fu{
Zi(){
System.out.println("zi show");
}
Zi(int x){
System.out.println("zi…"+x);
}
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
Zi z=new Zi(4);
}
}
结果为:
fu show
zi show
zi…4
class Fu{
Fu(int x){
System.out.println("fu show");
}
}
class Zi extends Fu{
Zi(){
super(4);
System.out.println("zi show");
}
Zi(int x){
super(3)
System.out.println("zi…"+x);
}
}
class ExtendsDemo{
public static void main(String[] args){
Zi z=new Zi();
Zi z=new Zi(4);
}
}
结果为:
fu show
zi show
fu show
zi…3
为什么子类一定要访问父类中的构造函数
因为父类中的数据子类可以直接获取,所以子类对象在建立时,需要先查看父类是如何对这些数据进行初始化的
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统