Java中类的继承学习小结
一、Java中什么是继承?
java是面向对象的编程语言,是类构成了java语言,而继承又是java 必不可少的,继承就是当你写一个类时,虽然这个类满足了某些功能但是你又想拓展它的功能,此时你就可以使用继承机制在写一个该类的子类,来完成你需要的功能;
二、继承的格式: public 子类名 extends 父类名(){}
注: Java中子类是单根继承的,即一个子类只能有一个父类,但一个父类可以有多个子类。
三、为什么需要继承?
子类继承父类时,子类会继承父类的所有行为和属性,子类可以复用父类的代码通过继承,可以不用重写父类中已有的属性和行为。在类与对象的学习总结中,战士类和怪兽类都具有相同的属性:血量和姓名,具有相同的方法:战斗方法,因此可以让它们都继承同一个父类,课提高代码的利用效率。
四、子类继承到了父类的哪些属性和方法
子类继承到了父类所有的属性和方法(public,protected,private,默认的)。
子类不能继承父类中访问权限为private的成员属性和方法。
1. 子类和父类在同一个包下,能调用的方法和属性:
只有私有的属性和方法不能在子类中和子类的对象调用。
2 .子类和父类不同包,能调用的属性和方法:
子类中: 公有的,受保护的属性和方法
子类的对象:公有的属性和方法
注:super关键字指父类对象,一般用来调用父类中方法
五、子类重写父类的方法
1 条件:1.已经继承到的方法
2.返回值数据类型 ,方法名,参数个数,参数类型, 参数顺序必须要和父类的完全一致。
3.子类重写方法时可以扩大访问修饰符的范围(但是不能缩小)。
2.什么情况要使用方法重写
当父类的方法不能满足实际的需求时
3.怎么调用重写的方法
优先调用子类的方法,如果子类没有,则调用父类的。
六、自动转型
要实现自动转型就必须要存在继承关系。
格式:
父类名 对象名 = new 子类构造方法();
Student stu = new UNStudent();
格式二:
public 返回值数据类型 方法名(父类名 对象名){
对象名.调用父类中定义过的方法();
}
父类名 对象名A = new 子类构造方法();
子类名 对象名B = new 子类构造方法();
方法名(对象名A);
方法名(对象名B);
自动转型引起编译错误的原因是:
1.编译机制的问题。
2.Java在编译的的时候,只会根据对象名的类型进行编译。
会将你调用的方法,拿到父类中进行一一比较,如果发现没有在父类中
定义的方法,则直接抛出编译错误。
注:程序运行时,还是会优先执行子类的方法,如果子类没有,才会执行父类的。
七、程序示例
通过改写类与对象学习总结中的战士与怪兽的程序达到:战士可以攻击怪兽,战士可以攻击其他的战士,怪兽也可以攻击其它的怪兽,知道一方的血量为0的时候结束战斗,输出谁胜利了!(战斗双方自行定义)。
/** * 定义一个Normal类 * @author huas * */ public class Normal { //定义属性 String name; int blood; //设置和调用属性值的方法 public void setName(String name){ this.name = name; }//设置姓名 public String getName(){ return name; }//得到姓名 public void setBlood(int x){ blood = x; }//设置血量 public int getBlood(){ return blood; }//得到血量 /** * 定义一个战斗方法 */ public void Attack(Normal n){ n.blood--; System.out.println(this.getName()+" 攻击了 "+n.getName()+" "); } } /* * 定义一个战士类继承Normal类 */ public class Soldier extends Normal{ /** * 构造函数 */ public Soldier(String name,int i){ this.name = name; blood = i ; } /** * 重写父类中的战斗方法 */ public void Attack(Normal n){ n.blood--; System.out.println(this.getName()+" 攻击了 "+n.getName()+" "); System.out.println(n.getName()+" 血量减一 "); System.out.println(n.getName()+" 血量为 "+n.getBlood()+" "+this.getName()+" 的血量为 "+this.getBlood()); System.out.println("----------------------------------------------------------------------------"); } } /* * 定义一个怪兽类继承Normal类 */ public class Monster extends Normal{ /** * 构造函数 */ public Monster(String name,int i){ this.name = name; blood = i; } /** * 重写父类中的战斗方法 */ public void Attack(Normal n){ n.blood--; System.out.println(this.getName()+" 攻击了 "+n.getName()+" "); System.out.println(n.getName()+" 血量减一 "); System.out.println(n.getName()+" 血量为 "+n.getBlood()+" "+this.getName()+" 的血量为 "+this.getBlood()); System.out.println("----------------------------------------------------------------------------"); } } /* * 定义一个Test类 */ public class Test { /**定义程序入口 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //实例化一个战士对象和怪兽对象(自动转型) Normal sd1 = new Soldier("雷欧",13); Normal sd2 = new Soldier("泰罗",10); Normal ms1 = new Monster("哥斯拉",5); Normal ms2 = new Monster("玛伊王",7); //确定攻击对象 VS(sd1,ms2); } /** * 定义战斗平台 */ public static void VS( Normal n1,Normal n2){ //攻击前判断双方血量是否均大于零 while((n1.blood>0)&&(n2.blood>0)){ n1.Attack(n2);//n1攻击n2 if(n2.blood<=0){ System.out.println(n1.getName()+" 胜利了 !"); break; }//若n2血量为零,则n2胜利,跳出循环 n2.Attack(n1); if(n1.blood<=0){ System.out.println(n2.getName()+" 胜利了 !"); break; }//若n2血量为零,则n1胜利,跳出循环 } } }
//程序运行的结果为 雷欧 攻击了 玛伊王 玛伊王 血量减一 玛伊王 血量为 6 雷欧 的血量为 13 ---------------------------------------------------------------------------- 玛伊王 攻击了 雷欧 雷欧 血量减一 雷欧 血量为 12 玛伊王 的血量为 6 ---------------------------------------------------------------------------- 雷欧 攻击了 玛伊王 玛伊王 血量减一 玛伊王 血量为 5 雷欧 的血量为 12 ---------------------------------------------------------------------------- 玛伊王 攻击了 雷欧 雷欧 血量减一 雷欧 血量为 11 玛伊王 的血量为 5 ---------------------------------------------------------------------------- 雷欧 攻击了 玛伊王 玛伊王 血量减一 玛伊王 血量为 4 雷欧 的血量为 11 ---------------------------------------------------------------------------- 玛伊王 攻击了 雷欧 雷欧 血量减一 雷欧 血量为 10 玛伊王 的血量为 4 ---------------------------------------------------------------------------- 雷欧 攻击了 玛伊王 玛伊王 血量减一 玛伊王 血量为 3 雷欧 的血量为 10 ---------------------------------------------------------------------------- 玛伊王 攻击了 雷欧 雷欧 血量减一 雷欧 血量为 9 玛伊王 的血量为 3 ---------------------------------------------------------------------------- 雷欧 攻击了 玛伊王 玛伊王 血量减一 玛伊王 血量为 2 雷欧 的血量为 9 ---------------------------------------------------------------------------- 玛伊王 攻击了 雷欧 雷欧 血量减一 雷欧 血量为 8 玛伊王 的血量为 2 ---------------------------------------------------------------------------- 雷欧 攻击了 玛伊王 玛伊王 血量减一 玛伊王 血量为 1 雷欧 的血量为 8 ---------------------------------------------------------------------------- 玛伊王 攻击了 雷欧 雷欧 血量减一 雷欧 血量为 7 玛伊王 的血量为 1 ---------------------------------------------------------------------------- 雷欧 攻击了 玛伊王 玛伊王 血量减一 玛伊王 血量为 0 雷欧 的血量为 7 ---------------------------------------------------------------------------- 雷欧 胜利了 !
此程序的战斗双方可随意定义,VS(Normal n1,Normal n2)中的战斗双方子要满足时Normal类或其子类都可以进行回合制战斗!
注:在写程序的过程中发现父类中的构造方法一般是不能被子类继承的,由此百度:要使得父类的构造方法能够被子类继承:有一个B类继承A类 public B(){
super(); //如果A类的构造方法没有参数 这句就可以省略 如果A类没有无参数的构造方法,你还必须写出来,并且把要传递的参数也写到super(参数);
......
}
相关推荐
### JAVA中的继承学习总结 #### 一、Java中的继承概念 继承是面向对象编程(OOP)的一个核心概念,它使得我们可以定义一个类继承另一个类的字段和方法。这样做的好处是可以减少代码冗余,提高代码复用性。在Java中,...
在Java编程语言中,类的继承是面向对象编程的一个核心概念,它允许我们创建新的类(子类)基于已存在的类(父类或超类)。继承提供了代码的复用性,使得子类可以共享父类的属性和方法,同时还可以添加自己的特定功能...
总结来说,这个实验报告通过实际编程练习,帮助我们巩固了Java中抽象类和抽象方法的定义,以及类的继承和多态性这两个核心概念。通过设计和实现学生管理类,我们可以更深入地理解这些概念在实际问题解决中的应用。
### Java中抽象类的学习总结 #### 一、抽象类的概念与特点 抽象类是Java编程语言中的一个重要概念,主要用于提供一种部分实现的功能,并允许子类完成剩余的实现。抽象类的特点如下: - **抽象方法**: 在定义Java...
在深入探讨Java中的继承这一核心概念之前,我们首先需理解其基本定义与作用。继承是面向对象编程(OOP)的四大基本特性之一,它允许一个新的类(子类)继承现有类(父类)的属性和方法,从而实现代码复用,减少冗余...
Java 类的继承、包及接口是Java编程中的核心概念,它们是构建复杂应用程序的基础。类的继承允许我们创建一个新的类,这个新类基于已存在的类(称为父类或超类),并可以添加新的特性和方法,或者修改父类的行为。这...
总结一下,Java中的继承是面向对象设计的重要组成部分,它允许我们构建层次化的类结构,实现代码复用和多态性。通过理解继承的原理和规则,开发者可以编写出更加高效、可读性强的Java程序。在学习和实践过程中,不断...
在Java编程语言中,类的继承是面向对象编程的一个核心特性。它允许创建一个新类(子类),该类不仅具有自身的属性和方法,还能直接继承一个或多个已存在的类(父类)的属性和方法,从而实现代码的重用和扩展。这种...
### Java继承与多态知识点详解 #### 一、引言 在面向对象编程语言中,继承和多态是非常重要的概念。它们提供了强大的机制来管理代码的复杂性,并且能够有效地复用现有代码。本文将详细介绍Java中的继承和多态概念...
继承是 Java 中的一种机制,允许一个类继承另一个类的属性和方法。继承的语法是使用 `extends` 关键字,例如 `public class Child extends Parent`。在 Java 中,只支持单一继承,也就是说一个类只能有一个直接父类...
在Java编程语言中,类的...通过这个实验,学生将更好地理解Java中类的继承机制,并能将其应用到实际的编程项目中。这不仅是学习Java的基础,也是进一步学习高级概念,如接口、抽象类、异常处理和集合框架的关键步骤。
总结起来,Java中的接口和继承是两种强大的工具,它们帮助开发者创建灵活、可扩展的代码结构,提高代码的复用性。接口定义了行为规范,而继承则实现了代码的层次化和复用。了解并熟练运用这些概念,对于成为一名优秀...
### Java方法继承、方法重载、方法覆盖总结 在Java编程语言中,方法继承、方法重载、方法覆盖是三个非常重要的概念。它们之间既有关联又有区别,掌握这些概念对于深入理解面向对象编程有着至关重要的作用。 #### ...
继承是Java中类之间的一种关系,其中一个类(子类)可以从另一个类(父类)继承属性和行为。在示例中,`Student` 类继承了 `Person` 类。这意味着 `Student` 类自动获得了 `Person` 类的所有公共字段和方法。在第二...
根据给定的文件信息,我们可以总结出以下有关Java编程语言中的类、继承以及构造方法的知识点: ### 一、类的定义与属性 在Java中,类是对象的模板或蓝图,它定义了一组相似的对象所共有的属性(变量)和行为(方法...
#### 四、小结 - **接口**:定义了一组方法签名,由其他类实现具体的方法体。 - **继承**:支持代码复用,子类可以继承父类的属性和方法,并可以扩展或覆盖父类的功能。 - **多态**:允许父类引用指向子类对象,...
在Java编程中,设计一个银行账户类是学习面向对象编程的一个常见练习,它涉及到类的定义、对象的创建以及继承和多态的概念。在这个实验中,我们创建了一个名为`BankCount`的类来代表银行账户,并包含了一系列与账户...
### Java中类的概念理解及相关实例 #### 一、引言 在Java编程语言中,类是面向对象编程的核心概念之一。本文将详细讲解Java中类的相关概念,并通过通俗易懂的例子帮助初学者更好地理解类的基本原理及其应用。此外...
"Java继承总结" Java中的继承是面向对象三大特性之一,在知识点上存在许多重要的细节。下面将对Java继承的基本概念、语法格式、继承关系、方法重写、自动转型等进行详细的总结和分析。 一、继承的基本概念 继承是...