Java超详细讲解三大特性之一的继承

目录
  • 继承的概念
    • 方法的重写
    • super关键字的使用
    • super调用构造器
  • 总结

继承的概念

继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

通过继承可以快速创建新的类,实现代码的重用,提高程序的可维护性,节省大量创建新类的时间,提高开发效率和开发质量。

继承性的好处:

  • 减少代码的重复
  • 提高代码复用性
  • 便于功能拓展

继承性的格式:class A extends B{}

A:子类,派生类,subclass,B: 父类 ,超类, 基类,superclass

体现:一旦子类A继承父类B之后,子类A中就获取了父类B中声明的所有的属性和方法,特别的,父类中声明为private的属性或方法,子类继承父类以后,仍然认为获取了父类中私有的结构,只有因为封装性的影响,使得子类不能直接调用父类的结构而已

子类继承父类以后,还可以声明自己特有的特有的属性或方法:实现功能的拓展。而一个父类是可以有多个子类的,java中类的单继承性:一个类只能有一个父类,子父类是相对的概念,子类直接继承的父类,称为:直接父类,间接继承的父类称为:间接父类,子类继承父类以后,就获取了直接父类以及所有间接父类中声明的属性和方法

如果我们没有显示的声明一个类的父类的话,则此类继承于java.lang.Object类,Object类是所有java类的根父类

继承中需要注意的点:

1.子类不能选择性继承父类;

2.Java不支持多重继承,但一个类可以实现多个接口,从而克服单继承的缺点;

3.构造方法不会被子类继承,但可以从子类中调用父类的构造方法。

例如

class teacher{             //声明一个teacher类为父类
	String name;      	   //定义父类的成员变量name、age
	int age;
	void show(){           //定义父类成员方法,将成员变量输出
		System.out.println(name);
		System.out.println(age);
	}
}
class Student extends teacher {     //声明一个Student类为子类并继承父类
}
public class myfirst {
	public static void main(String[] args) {
	System.out.println("学生");
	Student student=new Student();     //声明一个Student类的实例对象student
	student.name="Tom";                //子类调用父类的成员变量name并赋值
	student.age=19;                    //子类调用父类的成员变量age并赋值
	student.show();                    //子类调用父类的成员方法show
	}
}

方法的重写

在实际应用当中,我们所写的子父类的功能是不一样的,这时我们就需要重写或隐藏父类的该方法。

1重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作

2应用:重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名同参数的方法时,实际执行的是子类重写父类的方法

3重写的规定:

方法的声明:

权限修饰符 返回值类型 方法名(形参列表)

子类中的叫重写的方法,父类中的叫被重写的方法,子类重写的方法的方法名和形参列表与父类被重写的方法的方法名和形参列表相同,子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符 特殊情况:子类不能重写父类中声明为private权限的方法

关于返回值类型:

父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void,父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类

父类被重写的方法的返回值类型是基本数据类型(比如:double),则子类重写的方法的返回值类型必须是相同的

子类和父类中的同名参数的方法都必须声明为非static的才为重写,为static的不是重写

例如

class A{
	public void sayHello() {                      //输出英文欢迎
		System.out.println("Hello,Welcome to Java!!!");
	}
	public void sayBye() {
		System.out.println("GoodBye,everyone");
	}
}
class B extends A {
    public void sayHello() {                      //输出中文欢迎
    	System.out.println("大家好,欢迎学习Java!!!");
    }
}
public class myfirst {
	public static void main(String[] args) {
	B b=new B();                                //创建子类B的一个实例对象,使用默认构造方法
	b.sayHello();                               //调用子类中重写的方法
	b.sayBye();                                 //调用父类中的方法
	}
}

super关键字的使用

super理解为:父类的,super可以用来调用、属性、方法、构造器

super的使用,我们可以在子类的方法或构造器中。通过使用“super.属性”或“super.方法”的方式,显式的调用父类中声明的属性或方法,但是,通常情况下,我们习惯省略“super.

特殊情况:当子类和父类中定义了同名的属性时,我们要想在子类中调用父类中声明的属性,则必须显示的使用”super.属性“的方式,表明调用的是父类中声明的属性。当子类重写了父类中的方法之后,我们想在子类中的方法中调用父类中被重写的方法时,则必须显式的使用“super.方法”的方式,表明调用的是父类中被重写的方法。

super调用构造器

我们可以在子类的构造器中显式的使用“super(形参列表)”的方式,调用父类中声明的指定的构造器,"super(形参列表)"的使用,必须声明在子类构造器的首行,我们在类的构造器中,针对于”this(形参列表)"或super(形参列表)“只能二选一,不能同时出现,在构造器的首行,没有显式的声明”this(形参列表)“或”super(形参列表)“,调用父类中的构造器

例如

package first;
class A{
    public String name="张飞";         //添加成员变量
	public void say() {                //添加成员方法say
		System.out.println("我是父类A成员方法say");
	}
}
class B extends A{
    public String name="关羽";         //与父类中同名的字段,隐藏父类
	public void say(){                 //重写方法say
		super.say();                   //使用super关键字调用父类中的方法
		System.out.println("我是子类B成员方法say");
        System.out.println("父类的name名字:"+super.name); //使用super关键字访问父类中的变量
	}
}
public class myfirst {
	public static void main(String[] args) {
	  B b=new B();                     //创建子类的一个实例对象
	  b.say();                         //调用子类中重写的方法
	  System.out.println("子类的name名字:"+b.name);   //调用子类中的name
	}
}

总结

今天学习了java中继承的特性,方法的重写,以及super关键字的使用。

到此这篇关于Java超详细讲解三大特性之一的继承的文章就介绍到这了,更多相关Java继承内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2022-05-11

Java轻松掌握面向对象的三大特性封装与继承和多态

目录 1.封装 1.介绍 2.封装的理解和好处 3.封装的实现步骤 2.继承 1.介绍 2.继承的基本语法 3.继承的使用细节 3.super关键字 1.基本介绍 2.基本语法 3.细节与好处 4.super与this的比较 4.方法重写 1.基本介绍 2.注意事项与使用细节 3.重载与重写的比较 3.多态 1.基本介绍 2.具体体现 1.方法的多态 2.对象的多态(重点) 3.多态注意事项和细节讨论 1.多态的前提 2.属性 3.instance of 4.多态的向上转型 5.多态的向下转型

Java由浅入深讲解继承下

目录 1.代码块初始化 2.protected关键字 3.final关键字 4.Java中允许的继承方式 本篇紧接上一篇内容继续,还是从继承里的细节开始 1.代码块初始化 关于代码块的定义和使用因为之前已经进行过介绍,所以这里就不再赘述,我们所关注的点是父类和子类中的代码块在运行时候的先后顺序是怎样的 首先还是在父类以及子类中添加代码块,如下: //父类 { System.out.println("父类实例代码块"); } static { System.out.println(&qu

Java 继承与多态超详细梳理

目录 一.继承 1.继承的概念 2.继承的语法 3.父类成员访问 (1)子类中访问父类的成员变量 (2)子类中访问父类的成员方法 4.super关键字 5.子类构造方法 6.super和this 7.代码块执行顺序 8.继承方式 9.final关键字 10.继承和组合 二.多态 1.向上转型 2.重写 3.多态 一.继承 1.继承的概念 继承机制:是面向对象程序设计是代码可以复用的最重要手段,允许程序员在保持原有类特性的基础上进行扩展,增加新的功能,产生的新类,成为派生类/子类.继承主要解决的问

Java由浅入深讲解继承上

目录 1.什么是继承 2.继承的细节 2.1super关键字 2.2子类的构造方法 2.3super和this区别 继承同样是面向对象程序的特点 1.什么是继承 所谓继承就是抽取类的共性,进而实现代码的复用 继承的关键字是extends 现在定义一个类Tree,里面有树的名字.来源和科属,方法是打印树的形态特征,如下: class Tree { String name; String source; String genu; public void trait() { } } 上面的类除了方法t

Java超详细讲解类的继承

目录 写在前面 1.子类的创建 1.1子类的创建方法 1.2调用父类中特定的构造方法 2.在子类中访问父类成员 3.覆盖 3.1覆盖父类中的方法 3.2用父类的对象访问子类的成员 4.不可被继承的成员和最终类 实例java代码 写在前面 类的继承可以在已有类的基础上派生出来新的类,不需要编写重复的代码,提高了代码的复用性,是面向对象程序设计的一个重要的特点,被继承的类叫做父类,由继承产生的新的类叫做子类,一个父类可以通过继承产生多个子类,但是与C++不同的是Java语言不支持多重继承,即不能由多

Java中的继承详情

目录 一. 继承 1.1 继承的实现 1.2 继承的好处和弊端 二. 继承中的成员访问特点 2.1 继承中变量的访问特点 2.2 super 2.3 继承中构造方法的访问特点 2.4 继承中成员方法的访问特点 2.5 super内存图 2.6 方法重写 2.7 方法重写的注意事项 2.8. Java中继承的注意事项 三. 继承练习 总结 一. 继承 众所周知,我们Java语言是一种面向对象的编程语言,每当我们提到Java的特性,大家一定会在脑海里浮现出Java中的​继承.多态以及封装​. 我们在

Java全面分析面向对象之继承

目录 继承 什么是继承呢? 子类访问父类的成员变量 子类访问父类非同名成员变量 子类访问父类同名成员变量 子类访问父类的成员方法 子类访问父类的非同名方法 子类访问父类的同名方法 super关键字 super访问父类成员变量 super访问父类成员方法 创建构造方法 super与this的区别 顺序 详解访问修饰限定符 继承方式与组合 继承方式 组合 继承 什么是继承呢? 继承(Inheritance)是一种联结类与类的层次模型.指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口

Python面向对象之继承和组合用法实例分析

本文实例讲述了Python面向对象之继承和组合用法.分享给大家供大家参考,具体如下: 面向对象的组合用法 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积.圆环的周长是内部圆的周长加上外部圆的周长. 这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积.然后在"环形类"中组合圆形的实例作为自己的属性来用 # -*-coding:utf-8 -

java中的多态和继承示例分析

本文实例讲述了java中的多态和继承.分享给大家供大家参考,具体如下: 我们知道"多态"和"继承"是分不开的哦!我们先写2个类! Car类 class Car { private String name; private double price; public Car(String name, double price) { super(); this.name = name; this.price = price; } public String getName

Python面向对象之继承和多态用法分析

本文实例讲述了Python面向对象之继承和多态用法.分享给大家供大家参考,具体如下: Python 类的继承和多态 Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类(Base class.Super class). 我们先来定义一个class Person,表示人,定义属性变量 name 及 s

Python面向对象类继承和组合实例分析

本文实例讲述了Python面向对象类继承和组合.分享给大家供大家参考,具体如下: 在python3中所有类默认继承object,凡是继承了object的类都成为新式类,以及该子类的子类Python3中所有的类都是新式类,没有集成object类的子类成为经典类(在Python2中没有集成object的类以及它的子类都是经典类 继承式用来创建新的类的一种方式,好处是减少重复代码 class People: def __init__(self,name,age): self.name=name sel

Python面向对象之继承原理与用法案例分析

本文实例讲述了Python面向对象之继承原理与用法.分享给大家供大家参考,具体如下: 目标 单继承 多继承 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 继承 实现代码的重用,相同的代码不需要重复的编写 多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度 01. 单继承 1.1 继承的概念.语法和特点 继承的概念:子类 拥有 父类 的所有 方法 和 属性 继承的语法 class 类名(父类名): pass 子类 继承自 父类,可以直接 享受

《javascript设计模式》学习笔记二:Javascript面向对象程序设计继承用法分析

本文实例讲述了Javascript面向对象程序设计继承用法.分享给大家供大家参考,具体如下: 1.关于继承: 百度百科对继承的解释是:继承是指一个对象直接使用另一对象的属性和方法. (话说百科对于计算机概念的继承的解释也太简略了) 继承的好处,优点学过面向对象的同学都知道,就不赘述了. javascript中的继承有三种(不同的书上对这三中的名称翻译都不一样,我按照我的理解来命名吧): a.构造函数继承(类式继承,组合继承,伪经典继承) b.原型继承 c.原型赋值(遍历)继承(寄生式继承) 2.

详解JavaScript基于面向对象之继承实例

javascript面向对象继承的简单实例: 作为一门面向对象的语言,继承自然是它的一大特性,尽管javascript的面向对象的实现机制和和c#和java这样典型的面向对象不同,但是继承的基本特点还是具有的,简单的说就是获得父级的方法和属性,下面是一段简单的实例,大家有兴趣可以分析一下: window.onload = function(){ function parent(age,name){ this.age = age; this.name = name; } parent.protot

详解Java中使用externds关键字继承类的用法

理解继承是理解面向对象程序设计的关键.在Java中,通过关键字extends继承一个已有的类,被继承的类称为父类(超类,基类),新的类称为子类(派生类).在Java中不允许多继承. (1)继承 class Animal{ void eat(){ System.out.println("Animal eat"); } void sleep(){ System.out.println("Animal sleep"); } void breathe(){ System.o

Python面向对象之继承代码详解

本文研究的主要是Python面向对象之继承的相关内容,具体如下. Python 继承 即一个派生类(derived class)继承基类(bass class)字段和方法.继承也允许把一个派生类的对象作为一个基类对象对待.例如,有这样一个设计,一个Cat类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例如,Cat是一个Animal). 继承实现了代码的重用. 继承的基本语法: class 派生类名(基类名1 [, 基类名2....]): 基类名写在括号里,基本类是在

详解Java基础篇--面向对象1(构造方法,static、this关键字)

面向对象,面向过程的区别.拿下五子棋来说: 面向过程分析: 开始游戏 黑棋先走 绘制画面 判断输赢 轮到白棋 绘制画面 判断输赢 返回步骤2 输出结果 面向对象分析: 黑白双方,双方行为是一模一样的 棋盘系统,负责绘制画面 规则系统,判断犯规.输赢 传统的面向过程编程是思考问题的解决步骤,这种思维方式适用于问题规模较小时.可是当问题规模大,要求程序有更好的可扩展性,能更快速地查错时面向对象设计思想就能体现出其优势.面向对象更接近人类地自然思维方式,将现实世界中的事物抽象为对象和对象的方法. 面向