JAVA学习日志(7-2-子父类中成员的特点)
2016-07-19 00:00
513 查看
子父类出现后,类成员的特点:
类中的成员:
1.变量
如果子类中出现非私有的同名成员变量时
、 子类访问本类变量用this,访问父类变量用super
2.函数
当子类和父类出现一模一样的函数时,
当子类对象调用该函数,会运行子类函数的内容
这种是函数的另一个特性:重写(覆盖)
当子类继承父类,沿袭了父类的功能到子类中,
但是子类虽具备该功能,但功能的内容却和父类不一致,
这时没有必要定义新功能,而使用覆盖特性,保留父类的功能定义
并重写功能内容
该特性可用于更新、扩写功能
**子类覆盖父类,必须保证子类权限大于等于父类权限,否则编译失败
静态只能覆盖静态
与重载的区别
重载:只看同名函数参数列表
重写:子父类方法一模一样
3.构造函数
在对子类对象进行初始化时,父类的构造函数也会运行,
那是因为子类的构造函数默认第一行有一条隐藏的语句super( );
super():会访问父类中的空参数的构造函数 而且是子类中所有的构造函数的默认第一行
如果父类没有空参数,则必须在子类中指明访问对象:super(参数)
为什么子类一定访问父类的构造函数:
因为父类中的数据 子类可以直接获取,
所以子类对象在建立时,需要先查看父类是如何对
3ff0
这些数据进行初始化的
所以子类在对象初始化时,要先访问父类中的构造函数
如果要访问父类中的指定函数,可以通过super语句指定(super语句必须写在第一行与this() 不能共存)
**子类的实例化过程:
子类的所有构造函数,默认都会访问父类中空参数的构造函数
因为子类每一个构造函数内的第一行都有一句隐藏的super();
当父类中没有空参数的构造函数时,子类必须通过super或this语句来指定要访问的函数
子类的构造函数也可以手动指定this语句来访问本类中的构造函数
子类中至少会有一个构造函数来访问父类中的构造函数
类中的成员:
1.变量
如果子类中出现非私有的同名成员变量时
、 子类访问本类变量用this,访问父类变量用super
class Fu{ int num=4; } class Zi extends Fu{ int num=5; void show(){ System.out.println(super.num); //关键字super:引用父类对象 } } class ExtendsDemo2{ public static void main(String[] args){ Zi z=new Zi(); z.show(); } } //输出结果为4
2.函数
当子类和父类出现一模一样的函数时,
当子类对象调用该函数,会运行子类函数的内容
这种是函数的另一个特性:重写(覆盖)
当子类继承父类,沿袭了父类的功能到子类中,
但是子类虽具备该功能,但功能的内容却和父类不一致,
这时没有必要定义新功能,而使用覆盖特性,保留父类的功能定义
并重写功能内容
class Fu{ void show(){ System.out.println("我是你爸爸"); } void speak(){ System.out.println("VB"); } } class Zi extends Fu{ void show(){ System.out.println("我没你这儿子"); } void speak(){ System.out.println("JAVA"); } } class ExtendsDemo2{ public static void main(String[] args){ Zi z=new Zi(); z.show(); z.speak(); } }
该特性可用于更新、扩写功能
class ExtendsDemo2{ public static void main(String[] args){ newTel t=new newTel(); t.show(); } } class Tel{ void show(){ System.out.println("number"); } } class newTel extends Tel{ void show(){ super.show(); System.out.println("name"); System.out.println("pic"); } }
**子类覆盖父类,必须保证子类权限大于等于父类权限,否则编译失败
静态只能覆盖静态
与重载的区别
重载:只看同名函数参数列表
重写:子父类方法一模一样
3.构造函数
在对子类对象进行初始化时,父类的构造函数也会运行,
那是因为子类的构造函数默认第一行有一条隐藏的语句super( );
super():会访问父类中的空参数的构造函数 而且是子类中所有的构造函数的默认第一行
class ExtendsDemo2{ public static void main(String[] args){ Zi z=new Zi(); Zi z1=new Zi(4); } } class Fu{ Fu(){ System.out.println("fu run"); } } class Zi extends Fu{ Zi(){ System.out.println("zi run"); } Zi(int x){ System.out.println("zi..."+x); } } /*输出结果为 fu run zi run fu run zi...4 */
如果父类没有空参数,则必须在子类中指明访问对象:super(参数)
为什么子类一定访问父类的构造函数:
因为父类中的数据 子类可以直接获取,
所以子类对象在建立时,需要先查看父类是如何对
3ff0
这些数据进行初始化的
所以子类在对象初始化时,要先访问父类中的构造函数
如果要访问父类中的指定函数,可以通过super语句指定(super语句必须写在第一行与this() 不能共存)
**子类的实例化过程:
子类的所有构造函数,默认都会访问父类中空参数的构造函数
因为子类每一个构造函数内的第一行都有一句隐藏的super();
当父类中没有空参数的构造函数时,子类必须通过super或this语句来指定要访问的函数
子类的构造函数也可以手动指定this语句来访问本类中的构造函数
子类中至少会有一个构造函数来访问父类中的构造函数
class Person1{ private String name; Person1(String name){ this.name=name; } } class Student1 extends Person1{ Student1(String name){ super(name); } void method(){ super.show(); } }
相关文章推荐
- Thymeleaf官方文档(翻译)
- 【Java】Java 实现导出excel表 POI
- Java个人理解之时间的使用
- 抖动文字
- 【Leetcode】 83. Remove Duplicates from Sorted List 【两个指针】
- java读csv 和excel
- eclipse 快捷键记录
- Java Web应用的生命周期
- Java基础:JVM、JRE和JDK分别是什么?
- spring data jpa 学习小结
- 在Servlet(或者Filter,或者Listener)中使用spring的IOC容器
- PartII :spring 4.0的更新
- @Resource注解
- Spring注解@ResponseBody,@RequestBody
- java---GZIP压缩技术演示(结合XML文档配置,网页显示)
- Ubuntu16下面使用eclipse新建项目工程卡死
- Java泛型简明教程
- 【开发模式】 单例模式
- Java installation 安装报错 1603
- Spring MVC专题