继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(重写)的方式,产生一个新的类型。继承是面向对 象的三个基本特征——封装、继承、多态的其中之一,我们在使用java时编写的每一个类都是在继承,因为在java语言 中,java.lang.object类是所有类最根本的基类(或者叫父类、超类),如果我们新定义的一个类没有明确地指定继承自哪个基类,那么java 就会默认为它是继承自object类的。
1.为什么需要使用继承?
提高代码的重用性。
提高程序的扩展性。
2.Java继承的语法格式
Java继承的关键字:extends
格式:
public class 类名(子类,派生类,超类) extends 类名(父类,基类) {
}
注意:
Java类的继承是单继承。
3.子类继承到了父类的哪些属性和方法
子类继承父类后,子类继承到了父类所有的属性和普通方法。
构造方法没有被子类继承。
能不能调用方法或属性,是因为访问修饰符的关系来决定的。
public所有的地方都可以调用
protected当前包下和有继承关系不同包的子类中。
默认的只能在当前包下调用
private只能在当前类中。
子类能自己定义属性和方法吗?
可以并且子类可以拥有比父类更多的属性和方法
4.方法重写
方法重写的条件
必须要存在继承关系
方法的返回值类型,方法名,参数个数,参数类型,参数顺序都必须要和父类的完全一致。
子类重写方法时,方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
在调用方法的时候是否会调用错方法?
创建的对象是否是子类的(new 构造方法())
如果是子类的构造方法创建的对象,那会优先执行子类的方法,子类没有才会执行父类的方法。
重载和重写的区别:
重载和重写都是针对方法的概念,在弄清楚这两个概念之前,我们先来了解一下什么叫方法的型构。型构就是指方法的组成结构,具体包括方法的名称和参数,涵盖 参数的数量、类型以及出现的顺序,但是不包括方法的返回值类型,访问权限修饰符,以及abstract、static、final等修饰符。比如下面两个就是具有相同型构的方法:
public void method(int i string s) {
// do something
}
public string method(int i string s) {
// do something
}
而这两个就是具有不同型构的方法:
public void method(int i string s) {
// do something
}
public void method(string s int i) {
// do something
}
重载:
英文名是overload,是指在同一个类中定义了一个以上具有相同名称,但是型构不同的方法。在同一个类中,是不允许定义多于一个的具有相同型构的方法的。
方法名相同,但参数类型、数量或顺序必有一不同。
在同一类中或有继承关系的类中均可重载。
重写:
英文名是override,是指在继承情况下,子类中定义了与其基类中方法具有相同型构的新方法,就叫做子类把基类的方法重载了。这是实现多态必须的步骤。
方法名、参数类型、数量、顺序必须完全相同,访问修饰符可以不同, 但子类必须大于或等于父类。
只发生在有继承关系的类中。
5.自动转型
方向:由子类自动转为父类
前提:两个对象所在的类存在继承关系
语法:
[1]直接自动转型
父类名 对象名 = new 子类构造函数();
Student stu =new UNStudent();
[2]在方法中进行自动转型
子类名 对象名 = new 子类构造函数();
UNStudent unstu =new UNStudent();
teach(unstu);
访问修饰符 返回值类型 方法名(父类名 参数名){
}
public void teach (Student stu){
}
不必管创建对象左边的部分,只要看右边new的构造函数是子类还是父类, 如果是子类,则优先调用子类的方法。
注意:要使用自动转型,必须要存在继承关系。
格式:
父类名 对象名 = new 子类构造方法(参数值,...);
Student un = new UNStudent();
un.play();
使用自动转型后,不能调用子类自定义的方法;
因为Java编译时,只会根据对象名的类型去查找方法是否存在,如果存在则通过编译,如果不存在则报错。
实例:一个大学老师,可以教大学生,也可以教初中生,高中生,小学生
那么,对于这个教学的方法我们就可以只写一次。然后在使用时进行相应的自动转换一达到教学各种不同阶层学生的目地。
对于我们来说,使用自动转型,那么就只能调用父类中已经定义过的方法。
对于这个转型,我们有2种方法:
一:
父类名 父类对象名 = new 子类构造函数();
二:
父类名 父类对象名 = new 子类构造函数() 子类名 子类对象名 = new 子类构造函数();
public 返回值类型 方法名(父类类名 父类对象名){
父类对象名.方法名();
}
方法名(父类对象名);
方法名(子类对象名);
但是,自动转型也是有明显缺点的,如果使用自动转型,则无法调用子类的独有方法。因为计算机比较笨,它只能按照固定的已经设定好的方式去执行,Java在编译的时候,是根据对象名的类型去编译程序,这个时候在子类中,是找不到相应的方法的,所以编译出错了。
6.多态
多态是由方法重载,继承,方法重写,自动转型等技术的组合。
分享到:
相关推荐
封装继承多态总结
继承是面向对象编程(OOP)的一个核心概念,它使得我们可以定义一个类继承另一个类的字段和方法。这样做的好处是可以减少代码冗余,提高代码复用性。在Java中,继承通过`extends`关键字实现。Java中的继承支持单继承,...
这个文档总结概括了继承和抽象类的相关知识以及需要注意的事项
总结来说,这个实验报告通过实际编程练习,帮助我们巩固了Java中抽象类和抽象方法的定义,以及类的继承和多态性这两个核心概念。通过设计和实现学生管理类,我们可以更深入地理解这些概念在实际问题解决中的应用。
本文将深入探讨类继承的实现、作用以及相关的Java特性。 1. 类继承的实现和作用: 类继承通过使用关键字`extends`来实现。例如,`class ChildClass extends ParentClass`表明ChildClass是ParentClass的子类。继承...
总结来说,"表面积和体积_抽象类Shape_shape类继承_"的主题展示了如何利用C++的面向对象特性来设计和实现一个计算几何形状表面积和体积的程序。通过抽象类`Shape`定义通用接口,然后由具体的形状类(如`Cube`、`...
总结来说,Hibernate 3.2在处理类继承时提供了丰富的策略,开发人员可以根据具体需求选择合适的方式。理解和掌握这些策略有助于构建高效、可维护的ORM模型。通过`@Inheritance`注解和相应的配置,我们可以实现对象和...
在编程世界中,类与继承是面向对象编程(OOP)的核心概念,它们构成了许多现代编程语言的基础。本文将深入探讨这两个概念,并结合实际应用场景,帮助你更好地理解它们。 首先,我们来谈谈“类”。在OOP中,类可以...
c++继承与派生总结 面向对象的程序设计中提供了类的继承机制,允许...以原有的类为基础产生新的类,我们就说新类继承了原有类的特征,也就是说从原有类派生了新类。 类的派生机制的好处在于:代码的重用和可扩充性。
抽象类是一种不能被实例化的类,它用于定义共同接口,供其他类继承。在C#中,我们使用`abstract`关键字声明抽象类。例如,我们可能有一个`Animal`抽象类,其中包含一个抽象方法`MakeSound()`: ```csharp public ...
"Java继承总结" Java中的继承是面向对象三大特性之一,在知识点上存在许多重要的细节。下面将对Java继承的基本概念、语法格式、继承关系、方法重写、自动转型等进行详细的总结和分析。 一、继承的基本概念 继承是...
C++继承与派生类是面向对象编程的重要概念,它们允许我们创建新的类,这些类可以从现有的类(称为基类或父类)继承属性和行为。在这个实验中,我们将深入理解这两个概念,并通过实际编程练习来巩固它们。 一、继承...
本篇文章将详细介绍C#中的类继承,包括如何实现继承、构造函数在继承中的作用、以及重载、重写和隐藏的概念。 #### 二、实现继承 在C#中,实现类的继承非常简单。只需在定义子类时,在类名后面加上冒号 `:`,紧...
### C++类总结多态继承 #### 一、C++ 类的基本概念 1. **注意事项** - 在定义数据成员时不能直接给数据成员赋初值。这是因为类本身仅是一种类型,类中的数据成员并不实际占用内存空间。数据成员的初始化应该在...
实验报告可能会涵盖以下内容:实验目的(理解并掌握类的继承)、实验步骤(定义`Shape`和`Circle`类,实现相关方法)、实验结果(展示代码运行输出,如圆形面积的计算)以及实验总结(类继承的概念及其在实际编程中...
- 示例代码中,`Vehicle` 类的成员 `Maxspeed` 和 `Weight` 被 `Bicycle`、`Car` 和 `MotorCycle` 派生类继承,且能够通过派生类的 `Show` 方法进行访问。 3. 构造函数与析构函数的调用顺序: - 当创建派生类的...
7. 小结和最佳实践:总结继承的使用场景,提供关于何时以及如何使用继承的最佳实践。 通过学习这个视频教程,你将更好地理解C++继承的概念,并能熟练地在Qt开发中应用这些知识,创建出功能丰富、结构清晰的程序。
- 在C#中,我们使用`:`符号来表示一个类继承自另一个类。例如,如果`ChildClass`继承自`ParentClass`,代码会写作`public class ChildClass : ParentClass {}`。 - 子类继承父类后,将自动获得所有非私有(public...
在C++编程语言中,有时候我们可能需要创建一个类,使其不能被其他类继承,以保护类的结构和防止不合理的扩展。标题所提到的"不能继承的类",其目的是为了实现一种类的封闭性,确保其设计的意图不被误用。描述中提到...
这里 `Student` 类继承了 `Person` 类,添加了一个新的属性 `grade` 并重写了 `sayHello` 方法。当我们创建一个 `Student` 对象时,它不仅具有 `Person` 的所有属性和方法,还增加了自己的特性。 最后,我们谈谈...