类的继承里父类与子类的关系就像生活中父母与子女之间的关系一样,由于遗传导致子女必定会拥有父母的某些相同的基因,但是子女也可以拥有属于自己的基因,因此,子女大多会有某些特征或行为与父母相似,但是也会有属于自己的特点。然而,生活中的遗传是先天性的,而类的继承却是我们有意而为之的,因为利用继承不仅可以简化代码,减少工作量,子类还具有扩展性。
继承的语法格式:
public class 类名B extends 类名A {
//属性和方法
}
注意:
1.子类能继承到父类所有的属性和普通方法。
2.类名B叫做子类,超类,派生类;类名A叫做父类,基类。
3.Java的继承是单继承,不可以拥有多个父类。但是可以在继承一个父类之后还可以同时实现多个接口。
4.能调用(使用)的方法、属性和访问修饰符有关系:
同类中 不同类同包 不同类不同包 不同类不同包有继承
private 可以 不可以 不可以 不可以
默认的 可以 可以 不可以 不可以
protected 可以 可以 不可以 可以
public 可以 可以 可以 可以
方法重写是在类的继承里,因为子类和父类拥有相似的行为,但是具体的方法又不同,所以需要利用方法重写来完成。比如说:父类是学生,子类是大学生,父类里有一个学习的方法:void study(){score++;System.out.println(name+"在学习中,学分是"+score);}子类中也有一个学习方法:protected void study(){System.out.println(getName()+"的学习方式不同啦!");}。
方法重写的条件:
1.返回值类型,方法名,参数个数,参数顺序,参数类型要和父类的完全一致。
2.子类重写方法时,方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
3.调用时,因为对象的是子类的,所以应该优先在子类中查找,如果存在则调用;如果不存在则调用父类的。
自动转型也是必须存在继承关系才能使用的。自动转型的优点是可以简化代码,并且在方法设置参数时,可以扩大访问范围。比如:在设置一个父类学生后,它的子类有大学生、高中生、初中生、小学生,只要在创建对象是将所有学生自动转型为学生,这时候一个英语老师她的教学方法里的参数就可以设为学生,而在调用时,参数可以写大学生、高中生、初中生、小学生,这样可以少写很多教学方法。但是缺点是,使用自动转型之后,子类自己的方法不能执行,但是可以强制转型,
强制转型格式:
子类名 子类对象名(新设置的)=(子类名)父类对象名
自动转型格式:
父类名 对象名=new 子类名();
最后我们看一个例子:奥特曼和小怪兽进行PK,直到一方的血量为0时结束战斗,输出谁胜利了。要求:1.奥特曼可以攻击小怪兽或者其他的奥特曼对象2.小怪兽可以攻击奥特曼或者其他的小怪兽对象。3.只能使用一个战斗方法。
首先写一个父类Juese(角色类)
public class Juese { private String name; private int strength; private int blood; java.util.Random rand = new java.util.Random(); public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setStrength(int strength){ this.strength=strength; } public int getStrength(){ return strength; } public void setBlood(int blood){ this.blood=blood; } public int getBlood(){ return blood; } public void flight(Juese j){ j.setBlood(j.getBlood()-rand.nextInt(getStrength())); System.out.println(j.getName()+"被"+name+"攻击了,剩余的血量是"+j.getBlood()); if (j.getBlood()<=0) System.out.println(name+"胜利了"); } }
然后让Aoteman类和Xiaoguaishou类分别继承Juese类
public class Aoteman extends Juese { } public class Xiaoguaishou extends Juese{ }
最后写一个攻击方法,分别创建两个奥特曼对象和两个小怪兽对象,让他们进行PK
public class Flight { public static void main(String[] args) { Aoteman a=new Aoteman(); a.setName("奥特曼"); a.getName(); a.setStrength(10); a.getStrength(); a.setBlood(50); a.getBlood(); Xiaoguaishou x=new Xiaoguaishou(); x.setName("小怪兽"); x.getName(); x.setStrength(10); x.getStrength(); x.setBlood(50); x.getBlood(); Aoteman b=new Aoteman(); b.setName("奥特曼"); b.getName(); b.setStrength(10); b.getStrength(); b.setBlood(50); b.getBlood(); Xiaoguaishou y=new Xiaoguaishou(); y.setName("小怪兽"); y.getName(); y.setStrength(10); y.getStrength(); y.setBlood(50); y.getBlood(); while(a.getBlood()>0&&x.getBlood()>0&&b.getBlood()>0&&y.getBlood()>0){ a.flight(x); a.flight(b); x.flight(a); x.flight(y); } } }
相关推荐
继承与多态 继承是面向对象编程(Object-Oriented Programming)中的一种机制,允许一个类继承另一个类的属性和行为。...继承是一种强大的编程机制,允许子类继承父类的属性和行为,实现代码重用和简化编程的目的。
这个概念在"java拼图(应用继承大大简化代码了)"的示例中得到了充分的体现。通过继承,我们可以避免代码重复,提高代码的可复用性和可维护性,使程序设计更加模块化。 在这个拼图游戏中,很可能有一个基类`Piece`,...
`Object` 类是所有Java类的根类,包含了一些基本的方法如 `toString()`、`equals()` 等,这些方法可以被所有类继承使用。 - **耦合度问题**:继承可能导致较高的耦合度。这意味着当父类发生变化时,所有依赖于该父类...
一个好的抽象可以简化复杂问题,使得编程更加高效且易于维护。Murray特别强调了区分抽象层和实现层的必要性,因为这将影响到后续代码的组织结构以及维护成本。抽象层应该足够高层次,以隐藏复杂性,而实现层则应关注...
本资料“C++编程惯用法——高级程序员常用方法和技巧”深入探讨了这一主题,旨在帮助开发者更好地理解和应用C++的强大功能。以下是其中涵盖的一些关键知识点: 1. **模板(Templates)**:C++的模板允许我们创建...
1. **简化代码**:避免直接引用父类名,减少代码的耦合度。 2. **增强可维护性**:当父类发生改变时,子类的代码不需要修改。 3. **动态绑定**:根据运行时的继承关系找到合适的父类方法。 4. **支持多继承**:在...
在本资源中,“Java实战开发(李兴华)——代码部分”主要涵盖了Java编程语言的实际应用和项目开发。李兴华是一位知名的Java教育专家,他的教程通常深入浅出,注重实践,适合初学者和有一定经验的开发者提升技能。...
本篇将详细介绍Hibernate继承映射的第一种策略——每棵类继承树对应一张表,即单一表继承策略。 ### 单一表继承策略 在单一表继承策略中,所有类层次结构中的实例都存储在同一张数据库表中。这种策略通过在表中...
- **将单向关联改为双向 (Change Unidirectional Association to Bidirectional)**:增强对象之间的交互能力,简化代码逻辑。 - **将实值对象改为引用对象 (Change Value to Reference)**:在需要共享数据的情况下,...
自定义类加载器可以继承`java.lang.ClassLoader`,并覆盖`loadClass()`方法来实现热加载功能。 3. MsgHandler与MyManager 在描述中提到的`MsgHandler`可能是热加载的入口,它可能负责监听或触发类的热加载操作。而...
这些源代码将帮助读者更好地理解Flex的编程模式,通过实际操作来巩固理论知识。你可以通过查看和运行这些代码,学习如何运用布局管理器创建复杂的界面布局,如何进行数据绑定和调用远程服务,以及如何利用事件和动画...
Java支持类、接口、继承、多态性等面向对象的特性,并且拥有丰富的库支持,适用于Web应用、移动应用、企业级应用等各种场景。 2. **源代码**:源代码是程序员用特定编程语言编写的文本文件,包含人类可读的指令。在...
根据提供的文档内容,我们可以归纳出一系列关于C++的重要知识点,这些知识点主要涵盖了C++的基础语法、数据类型、内存管理、程序结构以及高级特性如类、继承与多态等。下面将详细阐述这些知识点: ### 1. 引言 C++...
Chapter 10:Making Method Calls Simpler 简化方法调用 Rename Method 重命名方法 Add Parameter 添加参数 Remove Parameter 去除参数 Separate query from Modifier 将查询方法与修改方法分离 ...
3. **继承**:继承允许创建新的类(子类)基于现有类(父类)。子类继承父类的属性和行为,可以扩展或覆盖原有功能,实现代码复用。 4. **多态**:多态性意味着同名函数在不同类中有不同的实现,即“一个接口,多种...
在Java中,类的继承是面向对象编程(OOP)的一个核心概念,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展性。在教学过程中,教师可以借助信息技术工具来更好地阐述这一概念。 ...
- 继承:允许创建一个类(子类)继承另一个类(父类)的属性和方法,实现代码复用。 - 多态:不同对象对同一消息的不同响应,体现为重写和重载。 - 接口:定义行为规范,实现多继承机制。 2. **封装、抽象与访问...
通过实际编写和运行代码,学生将能够更好地掌握类继承的基本原理及其在实际开发中的应用。 #### 实验知识点概述 1. **类与对象的概念**: - 类是对具有相同属性和行为的一组对象的抽象描述。 - 对象是类的一个...