1,使用继承的原因
可以少编写代码,有的不同类里的属性方法都是可以通用的,使用继承后,可以减少代码
2,继承用怎样的代码表示
在java 中,用extend 实现继承
具体的格式:public class 类名(这个是子类名,也叫做超类名或者派生类名) extends 类名(这个是父类名,也叫基类名){
//写方法体
}
3,、调用可以在子类中调用,
在子类中调用,就是说存在继承关系的子类中,可以调用父类中定义
过的属性和方法,但要注意其访问修饰符,如果是private,那么只能在
当前类中的{}中调用,即是在子类中不能被调用。如果是默认的,那么只能在
当前的包下中调用,如果子类在其他包中,则不能调用父类中的属性和函数。如果是
protected,则只能在当前包下和有继承关系的子类中调用,就算不在一个包中,有继承关系就行
如果是public,则在任何地方都可以调用
而且,子类在继承了父类的方法和属性后,还可以定义自己的属性和方法。这就大大增加了
子类的功能。
注意:子类一定要有一个和父类完全一样的构造方法,若父类的构造器是默认的,那么就不用
使用super来调用父类的构造器,它会默认调用,如果父类的构造器不是默认的,或者有多个(不包括
默认的那个时),子类必须要使用super调用一次,如果父类里有多个构造器,且存在一个默认的,那么
子类可以不用super,因为子类有一个默认的,与父类相同
4、方法重写:
因为子类的一种同名方法可能要有其个性,与父类不同,或者比父类完善,就要用到方法重写
方法重写的条件:
1.肯定要存在继承关系
2.方法的返回值类型(特别注意),方法名,参数个数,参数类型,参数顺序必须要完全一致
3.子类重写方法时方法的访问修饰符可以大于或者等于父类方法的访问修饰符。
顺序:private<默认的<protected<public
4.方法体不同,即是大括号里的代码不完全相同
重写之后的调用问题:
1、先要确定好创建的对象是子类还是父类的
2、若对象是子类的,若子类把此方法重写了,则优先调用子类的,否则执行父类的
5、自动转型问题(对我来说是难点)
注意:首要条件是存在继承关系
有两种自动转型格式:
一、父类名 创建的对象名 = new 子类名
这种是有缺陷的, 在自动转型后,调用的函数名必须父类中有,但子类如果重写了该方法
则优先调用子类的
二、调用的函数需要对象时,此对象可以是子类的,也可以是父类的类型
6.多态
多态是由方法重载,继承,方法重写,自动转型等技术的组合。
因为各种组合复杂多样,有多种形态
public class Manage {
public static void main(String[] args) {// 主函数
// 创建4个角色,并给属性赋值。
Roll ro1 = new Player("奥特曼1号", 100, 5);
Roll ro2 = new Player("奥特曼2号", 200, 8);
Roll ro3 = new Playerfour("小怪兽 1号", 300, 12);
Roll ro4 = new Playerfour("小怪兽2号", 50, 3);
//循环调用pk函数,ro1与ro2和ro3打,直到一方胜利
while(ro1.getBlood() > 0 && ((ro2.getBlood() >0)||ro3.getBlood()>0) ){
ro1.pk(ro2);
ro1.pk(ro3);
if(ro2.getBlood() > 0)
ro2.pk(ro1);
if(ro3.getBlood()>0)
ro3.pk(ro1);
}
//若ro1胜利,ro1跟ro4打,并输出胜利者
if(ro1.getBlood() > 0 ){
while (ro4.getBlood()>0 && ro1.getBlood() >0 ){
ro1.pk(ro4);
if(ro4.getBlood()>0)
ro4.pk(ro1);
}
if(ro1.getBlood()>0){
System.out.println(ro1.getName()+"胜利!");
}else{
System.out.println(ro4.getName()+"胜利!");
}
}
//若ro2胜利,则ro2跟ro4打,并输出胜利者
if(ro2.getBlood()>0){
while (ro4.getBlood()>0 && ro2.getBlood() >0 ){
ro2.pk(ro4);
if(ro4.getBlood()>0)
ro4.pk(ro2);
}
if(ro2.getBlood()>0){
System.out.println(ro2.getName()+"胜利!");
}else{
System.out.println(ro4.getName()+"胜利!");
}
}
//若ro3胜利,则ro3跟ro4打,并输出胜利者
if(ro3.getBlood()>0){
while (ro4.getBlood()>0 && ro3.getBlood() >0 ){
ro3.pk(ro4);
if(ro4.getBlood()>0)
ro4.pk(ro3);
}
if(ro3.getBlood()>0){
System.out.println(ro3.getName()+"胜利!");
}else{
System.out.println(ro4.getName()+"胜利!");
}
}
}
}
public class Player extends Roll{//继承父类Roll
public Player(String name,int blood,int aggressivity){
super(name,blood,aggressivity);//调用父类的构造器
}
//重写pk
public void pk(Roll p){
p.setBlood(p.getBlood()-2*this.getAggressivity());
System.out.println(getName()+"打了"+p.getName()+","+p.getName()+"的血量剩余"+p.getBlood());
}
}
public class Roll {//创建Roll类
//设置属性
private String name;
private int blood;
private int aggressivity;
//重载构造器
public Roll(String name,int blood,int aggressivity){
this.name=name;
this.blood=blood;
this.aggressivity=aggressivity;
}
//设置血量
public void setBlood(int blood){
this.blood=blood;
}
//得到血量
public int getBlood(){
return blood;
}
//得到姓名
public String getName(){
return name;
}
//得到攻击力
public int getAggressivity(){
return aggressivity;
}
//定义PK函数
public void pk(Roll roll){
roll.setBlood(roll.getBlood()-aggressivity);
System.out.println(name+"打了"+roll.getName()+","+roll.getName()+"的血量剩余"+roll.getBlood());
}
}
public class Playerfour extends Roll { //继承父类
public Playerfour(String name,int score,int aggressivity){
super(name,score,aggressivity);//调用父类构造器
}
}
相关推荐
在Java编程语言中,类继承是面向对象设计的一个核心特性,它允许我们创建一个新类(子类)作为现有类(父类)的扩展。当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、...
在Java编程语言中,类继承是面向对象编程的一个核心特性,它允许一个类(子类或派生类)从另一个类(父类或基类)继承属性和方法,从而实现代码的重用和扩展。本资源包含了一份关于Java类继承的源码示例,非常适合...
1. **类的继承**:在Java中,继承是面向对象编程的重要特性,允许一个类(子类)继承另一个类(父类)的属性和方法。例如,我们可以创建一个`Music`类作为其他音乐相关类的基类。 2. **构造方法**:构造方法用于...
Java 中继承与多态的题目 本资源摘要信息是关于 Java 中继承和多态的题目,涵盖了面向对象编程的基本概念和继承机制的应用。 继承的概念 继承是面向对象编程的一种机制,允许一个类(子类)继承另一个类(父类)...
说明: 这是一个包含两个类的Java程序代码示例,Person类表示一个人的基本信息,包括姓名、年龄和爱好列表;Student类表示一个学生对象,继承自Person类,并添加了学生ID和专业名称的信息。主程序入口Main类中创建了两...
这个例子展示了Java继承的核心概念,包括: 1. 使用`extends`关键字创建子类。 2. 访问和覆盖父类的方法。 3. 添加子类特有的方法。 4. 多态性的应用。 通过学习这个实例,开发者能够更好地理解和运用Java的继承...
Java类继承关系中的初始化顺序实例详解 Java类继承关系中的初始化顺序是Java编程语言中的一個重要概念。该概念关系到类的初始化顺序,静态成员变量的初始化顺序,普通成员变量的初始化顺序等。在本文中,我们将详细...
在Java编程语言中,类的继承是面向对象编程的一个核心概念,它允许我们创建新的类(子类)基于已存在的类(父类或超类)。继承提供了代码的复用性,使得子类可以共享父类的属性和方法,同时还可以添加自己的特定功能...
在这个特定的程序中,我们看到了一个关于Java继承的实例,它演示了子类对象初始化时涉及的各个步骤,包括构造方法、初始化值、父类构造方法以及父类的初始化值。 首先,我们有一个名为`Parent`的父类,它有两个实例...
Java 类继承实验报告 本实验报告的主要目的是掌握 Java 中的类定义、对象创建和使用、类继承的概念,以及派生类的定义。实验中,我们将定义一个名为 MyRectangle 的类,代表矩形,并派生出一个名为 MyCuboid 的子类...
java类和对象继承多态性 java类和对象继承多态性是java语言中的一种基本机制,它允许开发者创建一个新的类,并继承已有的类的属性和行为。这种机制可以提高代码的复用性和维护性。 继承是java语言中的一种机制,...
Java 类的继承是其面向对象特性中的核心概念之一,它为代码重用和构建复杂的软件结构提供了基础。在 Java 中,一个类可以扩展另一个类的功能,这个被扩展的类被称为父类(或超类),而扩展的类则称为子类(或派生类...
在这个名为“李兴华java继承的应用”的主题中,我们将深入探讨Java类继承的概念、语法以及其在实际编程中的应用。 1. **类的继承概念** 在Java中,类的继承是通过使用关键字`extends`来实现的。子类可以获取父类的...
在Java编程语言中,类的继承是面向对象编程的一个核心概念。这个实例是关于如何在超市购物场景下应用继承机制的。在这个系统中,我们有以下几个关键类:`ShoppingCar`(购物车)、`Database`(数据库)、`McBean`...
了解这些概念后,我们可以看到`GenericClass.java`文件可能包含了关于如何创建和使用继承泛型类的实际代码示例。而`Java.jpg`可能是用于辅助解释的图像,比如类结构图或代码截图。在实际学习过程中,结合代码和图像...
JavaIO类InputStream/OutputStream继承关系图,使您对IO类一目了然
Java中的类与继承是面向对象编程(Object-Oriented Programming, OOP)的核心概念,它们在构建复杂的软件系统中起到至关重要的作用。面向对象编程是一种编程范式,它基于对象和类的概念,通过继承、封装和多态等特性...
Java继承是面向对象编程(OOP)的一种机制,允许一个类继承另一个类的成员变量和成员方法。通过继承,可以实现代码的重用和扩展。 在Java中,继承是通过使用关键字`extends`来实现的。例如,`class B extends A`...
在Java编程语言中,`extends`关键字用于实现类的继承机制。类的继承是面向对象编程的一个核心特性,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的复用和扩展。下面将详细探讨`extends`...
Java 类和继承是面向对象编程的核心概念,它们构成了Java程序设计的基础。在这个代码集中,我们很显然会看到一系列关于如何创建和使用Java类以及实现继承的示例代码。以下是对这些概念的详细解释: 1. **Java 类**...