Java重修之路(八)面向对象之继承,子父类中变量、函数、构造函数的特点,子类实例化过程。
来源:互联网 发布:access数据库和excel 编辑:程序博客网 时间:2024/04/26 19:02
继承
继承就是子类继承父类的特征和行为,使得子类具有父类的各种属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
提高了代码的复用性
让类与类之间产生关系,有了多态的特性。
不要单纯为了获取其他类的功能属性、简化代码而随意继承,必须是类与类之间有所属关系才可以继承。
Java只支持单继承。 即只能继承一个类。
单继承原因:
因为多继承容易有安全隐患。
假设继承多个类,则本类具有父类的属性和方法,如果多个类中有相同的属性或者方法,则不能区分。
虽然不支持多继承,但是用多实现弥补了不支持多继承的缺陷。
Java支持多层继承。
子父类中变量的特点
- 变量
public class Hello extends ClassTwo { public static void main(String[] args) { ClassTwo classTwo = new ClassTwo(); System.out.println(classTwo.num + "===" + classTwo.num2); }}class ClassOne { int num = 3;}class ClassTwo extends ClassOne { int num2 = 1;}打印结果:3===1
此时ClassOne中有一个int型变量,ClassTwo继承自ClassOne拥有了这个变量,然后自己又定义了一个int型的num2,互不冲突,于是对象classTwo 就有两个变量。
但是如果在CLassTwo中也有一个与父类同名的变量,就会覆盖掉原来的变量:
class ClassOne { int num = 3;}class ClassTwo extends ClassOne { float num = 1.0f;}此时ClassTwo的对象中只有一个变量,那就是float型的num,并且已经赋值。
public class Hello extends ClassTwo { public static void main(String[] args) { ClassTwo classTwo = new ClassTwo(); classTwo.show(); // 在创建对象时,会先加载父类,然后加载子类,在一个对象实例中既有父类的成员,也有本类的成员 }}class ClassOne { public int num = 3;}class ClassTwo extends ClassOne { int num = 5; void show() { System.out.println(num);// 默认省略了 this.其实是this.num System.out.println(super.num);// 用super打印父类中的变量 // 如果本类中没有num,则System.out.println(num);打印父类中的num }}
2. 函数的特点
如果子类父类中的方法一致,则子类会重写父类的方法(覆盖)
覆盖并不是父类的方法不存在,只是不运行而已。子类中的方法优先运行。
public class Hello extends ClassTwo { public static void main(String[] args) { ClassTwo classTwo = new ClassTwo(); classTwo.show(); }}class ClassOne { void show() { System.out.println("我是父类!"); }}class ClassTwo extends ClassOne { void show() { System.out.println("我是子类!"); }}打印结果:我是子类!
子类函数必须大于等于父类权限,才可以覆盖。
重载和重写:
多个函数之间才可能有重载关系,多个同名函数参数列表不同会发送重载现象,详见 函数重载详解
子父类中不允许出现返回值类型不同的同名函数。
3. 构造函数的特点
public class Hello extends ClassTwo { public static void main(String[] args) { new ClassTwo(); }}class ClassOne { ClassOne() { System.out.println("父类构造函数!"); }}class ClassTwo extends ClassOne { ClassTwo() { // super();//这一句是默认的 但是不显示出来 System.out.println("子类构造函数!"); }}运行结果:父类构造函数!子类构造函数!
如果父类的有自己写的构造函数,即空参数的构造函数不存在,就必须在子类的构造函数中指明
public class Hello extends ClassTwo { public static void main(String[] args) { new ClassTwo(); }}class ClassOne { ClassOne(int x) { System.out.println("父类构造函数!"); }}class ClassTwo extends ClassOne { ClassTwo() { super(3);//指明父类的构造函数 System.out.println("子类构造函数!"); }}
子类实例化过程:
就到这里,需要好好消化理解一下了。
0 0
- Java重修之路(八)面向对象之继承,子父类中变量、函数、构造函数的特点,子类实例化过程。
- java面向对象-子父类中构造函数的特点-子类实例化过程super
- 面向对象(子父类中构造函数的特点-子类实例化过程)
- 面向对象(子父类中构造函数的特点-子类实例化过程)
- JAVA子父类中构造函数的特点-子类实例化过程
- 面向对象-简单的(子父类构造函数的特点)-子类实例化过程
- Java重修之路(六)面向对象初识,类与对象,成员变量,局部变量,封装,构造函数,构造代码块,this关键字
- 子父类中构造函数的特点-----子类实例化过程
- 子父类中的变量,函数,构造函数的特点以及子类的实例化过程
- 01-面向对象(继承-子父类中的构造函数-子类的实例化过程).1 01-面向对象(继承-子父类中的构造函数-子类的实例化过程)2 01-面向对象(继承-子父类中的构造函数-子类的实例化过程)3
- 02-面向对象(继承-子父类中的构造函数-子类的实例化过程-细节) 02-面向对象(继承-子父类中的构造函数-子类的实例化过程-细节)2 02-面向对象(继承-子父类中的构造函数-子类的实例化
- 【继承】----子父类中的构造函数,子类的实例化过程
- Java重修之路(七)面向对象之静态,主函数,Doc文档,静态代码块,对象初始化过程,单例设计模式
- 03-(继承-子父类中的构造函数-子类的实例化过程-图解)1. 03-(继承-子父类中的构造函数-子类的实例化过程-图解)2 03-面向对象(继承-子父类中的构造函数-子类的实例化过程-图解3
- static关键字特点懒汉式继承-子父类中的构造函数-子类的实例化过程final关键字抽象类接口
- 【面向对象】Java子类的构造函数
- Java 构造器之访问子类对象的实例变量
- 子类父类中类成员(变量、函数、构造函数)的特点
- 机器学习常见的六大错误
- Timer中schedule()的用法
- leetcode-13 Roman to Integer
- javaWEB总结(1):第一个servlet程序
- poj2017 Speed Limit
- Java重修之路(八)面向对象之继承,子父类中变量、函数、构造函数的特点,子类实例化过程。
- windows service程序的入门范例(二)
- android Toast五种酷炫样式
- 在Windows7 系统上安装windows自带的telnet服务
- effecive C++之接口继承和实现继承
- 八数码问题 BFS+hash
- Laravel如何与App交互(针对get与post)
- Ubuntu apt-get 出现Error 404:Not found Package Repository Errors
- 7、(知识篇)IO流(4)