Java学习——继承
将学生工人的共性描述提取出来,单独进行描述,
只要让学生和工人与单独描述的这个类有关系,就可以了。
继承:
1,提高了代码的复用性。
2,让类与类之间产生了关系。有了这个关系,才有了多态的特性。
注意:千万不要为了获取其他类的功能,简化代码而继承。
必须是类与类之间有所属关系才可以继承,所属关系 is a.
Java语言中:Java只支持单继承,不支持多继承。
因为多继承容易带来安全隐患:当多个父类中定义了相同功能,当功能不同时,子类对象
不确定要运行哪一个。
但是Java保留这种机制。并用另一种体现形式来完成表示。多实现
Java 支持多层继承。也就是一个继承体系
如何使用一个继承体系的功能呢?
想要使用体系,先查阅体系父类的描述,因为父类中定义的是该体系中共性功能
通过了解共性功能,就可以知道该体系的基本功能。
那么这个体系已经基本可以使用了。
那么在具体的调用时,要创建最子类的对象,为什么呢?
一是因为有可能父类不能创建对象。
二是创建子类对象可以使用更多的功能,包括基本的也包括特有的。
简单一句话:查阅父类功能,创建子类对象使用功能。
class A
{
voidshow()
{
System.out.println("a");
}
}
class B
{
void show()
{
System.out.println("b");
}
}
class C extends A,B
{
C c = new C();
c.show;
}
聚集:has a
聚合:
组合:
class Person
{
String name;
int age;
}
class Student extends Person
{ void study()
{
System.out.println("good study");
}
} class Worker extends Person
{ void work()
{
System.out.println("good work");
}
} class ExtendsDemo
{
public static void main(String[] args)
{
System.out.println("Hello World!");
}
}
子类出现后,类成员的特点:
类成员:
1, 变量。
2, 函数。
3, 构造函数。
1, 变量
如果子类中出现非私有的同名成员变量时。
子类要访问本类中的变量,用this
子类要访问父类中的成员变量,用super
this代表本类对象的引用。
super代表的是父类对象的引用。
2, 子父类中的函数
当子类出现和父类一模一样的函数时,
当子类对象调用该函数,会运行子类函数的内容。、
如同父类的函数被覆盖一样。
这种情况是函数的另一种特性:重写(覆盖)
当子类继承父类,沿袭了父类功能,到子类中,
但是子类虽然具备该功能的内容却和父类不一致,
这时,没必要定义新功能,而是使用覆盖特殊,保留父类的功能定义,并重写功能内容。
覆盖:
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
2,静态只能覆盖静态。
记住:
重载:只看同名函数的参数列表。
重写:子父类方法名要一模一样。
class Fu
{
int num = 4;
void speak()
{
System.out.println("vb");
}
} class Zi extends Fu
{
int num = 5; void speak()
{
System.out.println("java");
} void show()
{
System.out.println(super.num);
}
} class ExtendsDemo2
{
public static void main(String[] args)
{
Zi z = new Zi();
//z.show();
z.speak();
//System.out.println("Hello World!"); SmartPhone sp = new SmartPhone();
sp.show();
}
} class Tel
{
void show()
{
System.out.println("number");
}
} class SmartPhone extends Tel
{
void show()
{
//System.out.println("number");
super.show();
System.out.println("name");
System.out.println("picture"); }
}
为什么子类一定要访问父类中的构造函数。
因为父类中的数据子类可以直接获取。所以子类对象在建立时,需要查看父类是如何对这些数据进行初始化的。
所以子类在对象初始化时,需要先访问一下父类中的构造函数。
如果要访问父类中指定的构造函数,可以通过手动定义super语句的方式来指定。
注意:super语句一定定义在子类构造函数的第一行。
子类的实例化过程:
结论:
子类的所有的构造函数,默认都会访问父类中空参数的构造函数。
因为子类每一个构造函数内的第一行都有一句隐式super();
当父类中没有空参数的构造函数时,子类必须手动通过super()或this()语句形式来指定要访问父类中的构造函数。
当然,子类的构造函数第一行也可以手动指定this语句来访问本类中的构造函数
子类中至少会有一个构造函数会访问父类中的构造函数。
class Fu
{
int num;
Fu()
{
num = 60;
System.out.println("fu run");
}
Fu(int x)
{
System.out.println("fu ......"+x);
}
} class Zi extends Fu
{
Zi()
{
//super(); 调用父类构造函数 默认有此条
System.out.println("zi run");
}
} class ExtendsDemo3
{
public static void main(String[] args)
{
Zi z = new Zi(); System.out.println(z.num);
}
}
Java学习——继承的更多相关文章
- [ Java学习基础 ] Java的继承与多态
看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...
- java学习笔记6--类的继承、Object类
接着前面的学习: java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) java学习笔记2--数据类型.数组 java学习笔记 ...
- Java 学习(11): 面向对象编程—继承(super,this)
Java 继承 what: 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为.子类从它的父类中继承可访问的数据域和方法,也 ...
- 疯狂java学习笔记之面向对象(五) - 封装、继承、多态
一.封装: 封装的概念: - 合理的隐藏:隐藏不想被外界操作的Field.方法.构造器 - 合理的暴露:一般就是希望给别人调用的方法 e.g:显示器(按键暴露出来操作,但实际的东西/细节方法被隐藏起来 ...
- java学习笔记 --- 继承
继承 (1)定义:把多个类中相同的成员给提取出来定义到一个独立的类中.然后让这多个类和该独立的类产生一个关系, 这多个类就具备了这些内容.这个关系叫继承. (2)Java中如何表示继承呢?格式 ...
- Java学习之继承中的执行顺序详解
代码块(理解) (1)用{}括起来的代码. (2)分类: A:局部代码块 用于限定变量的生命周期,及早释放,提高内存利用率. B:构造代码块 把多个构造方法中相同的代码可以放到这里,每个构造方法执行前 ...
- java学习笔记(八):继承、extends、super、this、final关键字
继承解决代码重用的问题,方便管理和维护代码. 继承 子类拥有父类非private的属性,方法. 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展. 子类可以用自己的方式实现父类的方法. Java ...
- Java学习笔记二十三:Java的继承初始化顺序
Java的继承初始化顺序 当使用继承这个特性时,程序是如何执行的: 继承的初始化顺序 1.初始化父类再初始子类 2.先执行初始化对象中属性,再执行构造方法中的初始化 当使用继承这个特性时,程序是如何执 ...
- Java学习笔记二十一:Java面向对象的三大特性之继承
Java面向对象的三大特性之继承 一:继承的概念: 继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类. 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方 ...
随机推荐
- HTTP协议1之协议详解--转
当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了We ...
- 1218.2——property关键字
由于我们定义的成员变量是私有的,所有外部是无法访问的,为了能够访问我们写set和get方法 但是由于代码量过于复杂冗长,引入了@property (声明)和 @synthesize(实现) 后来又简化 ...
- MJExtension(JSON到数据模型的自动转换)
整理自:http://www.jianshu.com/p/93c242452b9b. 1.MJExtension的功能 字典-->模型 模型-->字典 字典数组-->模型数组 模型数 ...
- C#参数传递、引用类型、值类型等的理解
本博客不属于技术贴,主要是记录一些自己对不懂得地方的理解和学习的记录,请带着批判的眼光阅读~ 值类型存储在栈上,引用类型存储在堆上.栈是由高到低存储的,遵循先进后出的原则,是内存提前分配好的区域,内存 ...
- (转)最小二乘法拟合圆公式推导及vc实现[r]
(下文内容为转载,不过已经不清楚原创的是哪里了,特此说明) 转自: http://www.cnblogs.com/dotLive/archive/2006/10/09/524633.html 该网址下 ...
- C# 加密可逆
现在一直在做一个小软件,公司的通讯录系统,也没什么功能增删改查,这算是我来这个公司实习的第一件事吧. 在修改个人信息的时候一直对于密码显示这个存在矛盾,不知道应该是要哪种形式去做,后来自己就先用md5 ...
- 加速ssh连接
今天aws大姨妈了,也不知道是aws问题还是gfw的问题,反正我都已经问候了你们zzsbd!!! ping aws的丢包都是75%以上,这还玩个雕啊,果断去找加速的教程来看,但是发现cygwin下并没 ...
- 【04】基础:将采集结果转成Excel
前面的教程说了,数据抓取完毕之后,数据以xml格式的形式存储在本地文件夹中. 下面简单地说一下如何将保存在本地的XML文件转成Excel格式. 第一步:压缩文件 进入本地DataScraperWork ...
- RESTful 架构
越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...
- DeflateStream类
DeflateStream是另外一种压缩与解压缩流,使用方法与GZipStream类似,而且压缩之后的带下也差不多. 一.属性 BaseStream 获取对基础流的引用. CanRead 获取一个值 ...