Java中的继承性特性
继承性是java中的第二特性之一。而继承性最为关键的地方为:代码重用性的问题,利用继承性可以从已有的类中继续派生出新的子类,也可以利用子类扩展出更多的操作功能。
继承性的实现代码为:class 子类 extends 父类{ }
有以下3点说明:
1、对于extends而言,需要不断的开展开来,但是为了理解上的方便,这些统一称之为:继承;
2、子类又称之为派生类;
3、父类又称之为超类(Super class);
以下代码为子类继承父类的属性及方法
class Person{
private String name;
private int age;
public Person() {}
public Person(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
}
}
class Student extends Person {
private String school;
public void setSchool(String school){
this.school = school;
}
public String getSchool(){
return this.school;
}
}
public class School{
public static void main(String args[]){
Student stu = new Student();
stu.setName("zhangsan");
stu.setAge(123);
stu.setSchool("大学");
System.out.println("名字" + stu.getName() + ",年龄" + stu.getAge()+ stu.getSchool());
}
}
从这中间可以得到以个结论:
子类在实际中的运用中,是将父类定义得更加具体化的一种手段。
在继承的使用中,有三大限制,这些在实际的运用及编写代码的时候需要多加注意:
一、继承不可以多重继承,但是可以多层继承。
子类与父类的使用如下:
class A{
public void fun(){
System.out.println("这就是A");
}
}
class B extends A{
public void fun(){
System.out.println("这就是B");
}
}
class C extends A{
public void fun(){
System.out.println("这就是C");
}
}
class New1{
public static void main(String args[]){
B b1 = new B();
b1.fun();
C c1 = new C();
c1.fun();
}
}
二、在子类在继承父类时,严格来说会继承中,但是在父类多有的私有操作属于中称之为隐形继承。所有的非私有操作属于显示属性。
class A {
private String msg;
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() {
return this.msg;
}
}
class B extends A { // 继承自A类
}
public class Demo {
public static void main(String args[]) {
B b = new B();
b.setMsg("Hello"); // 设置msg属性,属性通过A类继承
System.out.println(b.getMsg()); // 通过子类对象取得msg属性
}
}
三、在子类构造前一定会默认调用父类的构造(默认使用无参构造),以保证父类的对象先实例化,子类对象后实例化。
观察实例化对象操作:
class A {
public A() { // 父类提供的无参构造方法
System.out.println("A、A类的构造方法!");
}
}
class B extends A { // B是子类继承父类A
public B() { // 定义子类的构造方法
System.out.println("B、B类的构造方法!");
}
}
public class Demo {
public static void main(String args[]) {
new B(); // 实例化子类对象
}
}
子类隐含语句:
class B extends A { // B是子类继承父类A
public B() { // 定义子类的构造方法
super() ; // 父类中有无参构造时加与不加无区别,如果编写则必须出现在首行
System.out.println("B、B类的构造方法!");
}
父类不提供无参构造方法:
class A {
public A(String title) { // 父类提供的有参构造方法
System.out.println("A、A类的构造方法,title = " + title);
}
}
class B extends A { // 定义子类B
public B(String title) { // 子类提供有参构造
super(title); // 明确调用父类构造,否则将出现编译错误
System.out.println("B、B类的构造方法!");
}
}
public class Demo {
public static void main(String args[]) {
new B("Hello"); // 实例化子类对象
}
}
方法覆写:
特产主要特征:子类可以根据父类已有的功能进行功能的扩展,但是在子类定义属性或方法时,可以出现定义的属性或方法与父类同名的情况,这样的操作成为覆写。
class A {
public void fun() { // 在父类中定义的方法
System.out.println("A类中的fun()方法。") ;
}
}
class B extends A { // 定义子类,此时没有覆写任何方法
public void fun() { // 此处为覆写
System.out.println("B类中的fun()方法。") ;
}
}
class C extends A {
public void fun() { // 此处为覆写
System.out.println("C类中的fun()方法。") ;
}
}
public class TestDemo {
public static void main(String args[]) {
B b = new B() ; // 实例化子类对象
b.fun() ; // 调用fun()方法,此时方法被覆写,所以调用被覆写过的方法
C c = new C() ; // 实例化子类对象
c.fun() ; // 调用fun()方法,此时方法被覆写所以调用被覆写过的方法
}
}
方法重载与重写的区别
区别 重载 覆写
英文单词 Overloading Override
发生 发生在一个类里面 发生在继承关系中
定义 方法名称相同、参数 方法名称相同、参数类型、个数相同、方法返回值相同
的类型及个数不同
极限 没有权限的限制 被覆写的方法不能拥有比父类更为严格的访问控制限制
区别 this super
功能 调用本类构造,本类方法,本类属性 子类调用父类构造,父类方法,父类属性
形式 先查找本类中是否存在有指定的调用结构, 不查找子类,直接调用父类操作
特殊 表示本类的当前对象 空
转载于:https://www.cnblogs.com/Zhuoshengda/p/7255805.html
Java中的继承性特性相关推荐
- java定义枚举并赋值_java中枚举的特性是什么?如何赋值?
上次已经为大家介绍过java枚举的概念是什么的主要内容了.今天再来为大家介绍一些相关的知识,也是关于java枚举的一些内容,也就是它的特性以及如何赋值,一起来了解一下吧. 首先说一下,java中枚举的 ...
- Java中的向上转型及向下转型
我们都知道Java的三大特性:封装.继承.多态. Java中的向上转型及向下转型体现了Java中的继承性及多态性,所谓继承,不难理解,存在于子父类间,子类继承父类中不被私有化的属性和方法.而多态性,顾 ...
- java string 不变_为什么String在java中是不可变的?
什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...
- Java中关于子类重写父类方法的坑
什么是方法重写? 设类B继承自类A.在A中定义方法了method_A,在B中定义方法了method_B.若method_B的签名等价于method_A的签名,则称B重写了A的method_A方法. 方 ...
- Java中的String为什么是不可变的? -- String源码分析
什么是不可变对象? 众所周知, 在Java中, String类是不可变的.那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的.不 ...
- java中不允许一个方法在自身定义的内部调用自己_Java面向对象三大特性(基础篇)...
面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA). 面向对象设计(OOD).面向对象程序设计(OOP)等新的系统开发方式模型的研究. 对语言 ...
- java中是否支持多重继承_java支持多重继承吗 JAVA特性面试题:
1.简要介绍java程序的健壮性. 答:JAVA程序会在编译和运行的时候自动的检测可能出现的错误,而且它是一种强类型语言,对于类型的检查很严格,而且它的垃圾回收机制也有效的避免了内存的泄漏. 2.为什 ...
- java如何理解继承性_理解 Java 的三大特性之继承
•通过代码深入了解继承 在讲解之前我们先看一个例子,该例子是前篇博文的. Husband.java: public classHusband {/** 对属性的封装 * 一个人的姓名.性别.年龄.妻子 ...
- 转:Java中子类是否可以继承父类的static变量和方法而呈现多态特性
原文地址:Java中子类是否可以继承父类的static变量和方法而呈现多态特性 静态方法 通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法,关于static方法,声明 ...
最新文章
- 使用程序创建数据库表
- 使用IDEA Maven搭建Mybatis环境
- Prime Distance On Tree-树分治+FFT
- JAVA入门级教学之(面向过程和面向对象的区别)
- 【大数据】大数据的特点
- 2021-2025年中国云计算数据中心IT资产处置(ITAD)行业市场供需与战略研究报告
- QA:Golang抽象nil问题
- 使用sever2008做DHCP中继代理
- 易语言5.71程序静态破解
- C#实现目录跳转(TreeView和SplitContainer)
- 上市企业高管背景特质研究解析
- stm32程序flash下载和sram运行
- Self-supervised Heterogeneous Graph Neural Network with Co-contrastive Learning 论文阅读
- 微信小店怎么设置优惠券
- 【Zookeeper】查看注册信息命令
- 28岁,转行学IT还来得及么?
- Android高级工程师技能知识储备,android实战项目源码
- Jetpack系列之Navigation----入门(五)
- Yii整合商城经典教学视频(59视频)
- 转载中国地理信息产业现状、问题与出路分析