继承:关键字extends
java 中继承是单继承 允许多个子类继承一个父类,不允许一个子类继承多个父类。
继承是继承父类的所有属性和方法,但并不是所有的属性和方法都可被子类调用;
子类继承父类是必须写一个与父类相同的构造方法,否则会报错。当实例化一个子类对象时,实际上
既调用子类的构造方法又调用了父类的构造方法(父类构造方法再子类构造方法)。
父类有哪些属性和方法?
private 类{}中
默认的 包中
protected 包中和包外的子类
public 项目中
子类可调用父类的哪些属性和方法呢?
1)子类继承父类 主函数中可调用的 属性和方法(子类和父类在同一包下)
protected
public
默认的
2)子类继承父类 主函数中可调用的 属性和方法(子类和父类在不同包下)
public
3)在子类中能调用的属性和方法(子类和父类在同一包下)
默认的
protected
public
4)在子类中能调用的属性和方法(子类和父类在不同包下)
protected
public
方法重写的条件?
1、继承
2、返回值数据类型、方法名、参数类型、参数个数、参数顺序必须完全一致
3、子类重写方法时可以扩大访问修饰符的范围(或保持一致):小的可转换为大的
什么情况下使用方法重写?
当子类与父类的方法一样时,但产生相应的效果不一样,如父类 学生 有一方法study(){grade++} 学习后考试成绩增加 子类大学生
也应有一个相同的学习的方法,但大学生学习后产生的效果肯定与父类不同,此时就需用到方法重写,如 study(){grade++;score++;}
此时,大学生学习后不光考试成绩增加而且学分也增加。总而言之,若想子类与父类有相同的行为,但会产生不同的效果时,就要用到重写。
如何调用重写后的方法?
super关键字 可调用父类的方法
调用构造方法:super(参数);
调用方法: super.方法名;
自动转型
条件
必须存在继承关系
格式
父类名 对象名 = new 子类名();
例如:Student UNstudent = new UNstudent();
问题:无法调用子类的方法
原因:编译机制的问题,当调用方法时,系统会自动从父类中寻找相应的方法,若没有,则编译不通过,若有,则优先从子
类中调用相应的方法。(实际上实例化了两个对象(父类、子类),new 子类在内存中)
好处 (类似与多态中virtual用法)
大学英语老师教大学生,他也可以教高中生、初中生、小学生、幼儿园。
若没用到自动转型时:老师的teach方法
teach(大学生){study();}
teach(高中生){study();}
teach(初中生){study();}
teach(小学生){study();}
teach(幼儿园){study();}
若用到自动转型时:
teach(学生){study();}
生活中什么情况下是自动转型?
byte b = 10;
int i = b;
^ 动物类
| 哺乳动物
| 人类
人类是哺乳动物
哺乳动物是动物
人类是动物
多态:
多态指的是同一个父类由不同子类继承,如父类 Student 可由大学生UNstudent 小学生PRstudent ...继承,
相应的子类可调用父类相应的属性和方法,此时就不用将两个子类都共有的属性和方法,分开写在各自的类中,而可以直接从
父类中调用,这样可节省代码,减少代码的重复。
接口
定义接口的关键字是interface
格式
public interface 接口名 extends 接口,......{
//常量
public static final 数据类型 常量名 = 值;
//抽象方法
public 返回值数据类型 方法名(数据类型 数据名);//不能加大括号 若加了说明方法有具体实现
}
接口是多继承可同时继承多个接口,不能实例化对象
注意四点:
类去实现接口的关键字:implements
抽象类
定义抽象类的关键字:abstract class
格式:
public abstract class 抽象类名 extends 类名或抽象类名 implements 接口名,......{
//类中所有 的属性和方法
//接口中的常量和抽象方法
public abstract 返回值数据类型 方法名(数据类型 参数名,....);
}
抽象类也不能实例化对象
接口与抽象类的区别:抽象类中,可以定义已实现的方法,也可以定义像接口中没有实现的方法--继承的子类就必须实现;
接口中的方法必须实现。
Hero父类
public class Hero {
private String name;
private int Q;
private int W;
private int E;
private int R;
private int blood;
private char skill;
public Hero(String name,int blood,int Q,int W,int E,int R){
this.name = name;
this.blood = blood;
this.Q = Q;
this.W = W;
this.E = E;
this.R = R;
}
//返回名字的方法
public String getname(){
return name;
}
//返回血量的方法
public int getblood(){
return blood;
}
//返回攻击力的方法
public int getATK_Q(){
return Q;
}
public int getATK_W(){
return W;
}
public int getATK_E(){
return E;
}
public int getATK_R(){
return R;
}
//设置血量的方法
public void setblood(int blood){
this.blood = blood;
}
//设置攻击的方法
public void attack(Hero h,char skill){
if(skill=='Q'){
h.setblood(h.getblood()-this.getATK_Q());
System.out.println(this.getname()+"技能Q攻击了"+h.getname());
System.out.println(h.getname()+"的血量为:"+h.getblood());
}
else if(skill=='W'){
h.setblood(h.getblood()-this.getATK_W());
System.out.println(this.getname()+"技能W攻击了"+h.getname());
System.out.println(h.getname()+"的血量为:"+h.getblood());
}
else if(skill=='E'){
h.setblood(h.getblood()-this.getATK_E());
System.out.println(this.getname()+"技能E攻击了"+h.getname());
System.out.println(h.getname()+"的血量为:"+h.getblood());
}
else if(skill=='R'){
h.setblood(h.getblood()-this.getATK_R());
System.out.println(this.getname()+"技能R攻击了"+h.getname());
System.out.println(h.getname()+"的血量为:"+h.getblood());
}
}
//声明一个英雄战士函数
public void show(){}
}
子类继承自父类
public class Twisted extends Hero {
public Twisted(String name, int blood, int Q, int W, int E, int R) {
super(name, blood, Q, W, E, R);
}
public void show(){
super.show();
System.out.println("英雄:"+super.getname()+"/血量:"+super.getblood()+"/Q(万能牌)的攻击力:"+super.getATK_Q()
+"/W(选牌)的攻击力:"+super.getATK_W()+"/E(卡牌骗术)的攻击力:"+super.getATK_E()+"/R(命运)的攻击力:"+super.getATK_R());
}
}
public class Garen extends Hero{
public Garen(String name, int blood, int Q, int W, int E, int R) {
super(name, blood, Q, W, E, R);
}
public void show(){
super.show();
System.out.println("英雄:"+super.getname()+"/血量:"+super.getblood()+"/Q(致命打击)的攻击力:"+super.getATK_Q()
+"/W(勇气)的攻击力:"+super.getATK_W()+"/E(审判)的攻击力:"+super.getATK_E()+"/R(德玛西亚正义)的攻击力:"+super.getATK_R());
}
}
程序主函数
public class Battlefield {
/**程序入口主函数
* @param args
*/
public static void main(String[] args) {
Hero garen = new Garen("盖伦",1000,35,30,75,135);
Hero twisted = new Twisted("崔斯特",700,100,50,100, 200);
garen.show();
twisted.show();
while(garen.getblood()>0&&twisted.getblood()>0){
twisted.attack(garen, 'Q'); //卡牌用Q攻击
if(garen.getblood()<0){
System.out.println(garen.getname()+"被击杀!");
System.out.println(twisted.getname()+"拿到一血!!!!");
}
else {
garen.attack(twisted, 'Q'); //盖伦用Q攻击
if(twisted.getblood()<0){
System.out.println(twisted.getname()+"被击杀!");
System.out.println(garen.getname()+"拿到一血!!!!");
}
else{
twisted.attack(garen, 'W'); //卡牌用W攻击
if(garen.getblood()<0){
System.out.println(garen.getname()+"被击杀!");
System.out.println(twisted.getname()+"拿到一血!!!!");
}
else {
garen.attack(twisted, 'W'); //盖伦用W攻击
if(twisted.getblood()<0){
System.out.println(twisted.getname()+"被击杀!");
System.out.println(garen.getname()+"拿到一血!!!!");
}
else{
twisted.attack(garen, 'E'); //卡牌用E攻击
if(garen.getblood()<0){
System.out.println(garen.getname()+"被击杀!");
System.out.println(twisted.getname()+"拿到一血!!!!");
}
else {
garen.attack(twisted, 'E'); //盖伦用E攻击
if(twisted.getblood()<0){
System.out.println(twisted.getname()+"被击杀!");
System.out.println(garen.getname()+"拿到一血!!!!");
}
else{
twisted.attack(garen, 'R'); //卡牌用R攻击
if(garen.getblood()<0){
System.out.println(garen.getname()+"被击杀!");
System.out.println(twisted.getname()+"拿到一血!!!!");
}
else {
garen.attack(twisted, 'R'); //盖伦用R攻击
if(twisted.getblood()<0){
System.out.println(twisted.getname()+"被击杀!");
System.out.println(garen.getname()+"拿到一血!!!!");
}
}
}
}
}
}
}
}
}
}
}
分享到:
相关推荐
2. 丧偶儿媳对公婆、丧偶女婿对岳父母,若尽了主要赡养义务,可视为第一顺序继承人。 3. 非继承人但对被继承人提供了主要扶养或生活支持的人,可以分得适当遗产。 遗产的分配原则需遵循一系列准则: 1. 夫妻共有...
理解并熟练运用这些映射关系,能帮助我们更好地设计和实现Java应用的数据层,提高开发效率,同时保持数据模型的灵活性和扩展性。在实际项目中,应根据业务需求和性能考虑,选择合适的映射策略。
声明书中的声明人,作为被继承人的法定继承人之一,对被继承人的房产拥有继承权,但出于个人意愿选择放弃。 在撰写放弃继承权声明书时,需要明确声明放弃这一权利是出于自愿,不附带任何条件。此外,声明书中应当...
在当今社会,财产继承权作为一项基本经济权利,对于保护公民个人的合法权益,促进社会和谐与稳定...通过对继承法的学习和实践,可以更好地理解和运用继承权,维护自身和家庭的合法权益,同时为建设法治社会贡献力量。
《民法典》对夫妻共同财产的规定,以及继承权的行使,仍然遵循着个人有权决定是否继承遗产的法律精神,前提是这种决定不违背法定的义务和权利保护。 因此,面对夫妻一方在婚后放弃遗产继承的情况,只要这一决定不...
放弃继承可能是基于多种原因,如个人的道德观念、与其他继承人的约定或对继承利益的考量。声明中通常还包含对被继承人生前是否有未缴税款、债务,是否留有遗嘱或存在遗赠扶养协议的确认。确认这些情况有利于避免未来...
在C++编程语言中,继承和派生是面向对象编程的重要概念,它们允许我们创建类的层次结构,实现代码重用和多态性。...通过实际编程,可以加深对这些概念的理解,并为构建更复杂的类层次结构打下坚实的基础。
这份文档通常用于法律事务中,特别是在处理财产继承问题时,用以确认某个人或群体对特定财产享有继承权利。下面我们将深入探讨继承权证明书的相关知识点。 1. 继承权基础:继承权是法律赋予公民的一种权利,它允许...
财产继承权及财务管理是涉及个人财产分配和保护的重要领域,主要涵盖个人财产的归属、所有权的含义、法律保护公民财产所有权的意义...了解这些知识可以帮助人们更好地理解并处理财产继承中的复杂情况,保障自身权益。
在当今社会,随着经济的快速发展和财产价值的增加,财产权的保护变得越来越重要。...通过对继承法的理解和遵守,每个公民都能更好地保护自己的财产权益,防止因遗产继承问题而引发的不必要矛盾,确保社会的和谐与公正。
遗产包括被继承人死亡时遗留的个人合法财产,如合法收入、房屋、储蓄、生活用品、林木、牲畜、家禽、文物、图书资料、生产资料、著作权、专利权中的财产权利以及其他合法财产,如债权和有价证券等。 案例分析:王...
这一点对于理解继承过程的时序非常重要。 关于遗产条件,它是指只有合法的个人财产才能被继承,且必须是在个人去世时存在的财产。以王老汉为例,他的稿费、房产、储蓄等都属于合法遗产,可被继承。然而,若他低价...
- 理解财产继承权的概念,明白国家对公民财产继承权的保护。 - 学习遗产的定义,它是指被继承人死亡时遗留的个人合法财产。 - 掌握被继承人(去世的人)、继承人(有权接受遗产的人)和继承权的含义。 - 了解...
### JS原型的个人理解 #### 引言 在JavaScript中,原型(Prototype)是一个非常核心的概念,它决定了对象之间的继承关系以及属性查找机制。本文将深入探讨JS原型的基本原理、实现方式及其应用,并通过具体示例帮助...
不过,我可以为您提供关于继承法的一般性知识点,虽然这些知识点并不直接来源于您提供的文件内容,但它们可以作为参考帮助您理解继承法的基本概念。以下是继承法的一般知识点: 继承法是民法领域中的一个重要组成...
财产的继承是法律中关于个人财产传承的重要环节,尤其在青少年教育中,理解这一概念有助于培养他们的法律意识和财产权观念。本节课针对初中八年级的学生,旨在让他们掌握财产继承的基本知识,理解财产继承的两种主要...
这种对个人与社会关系的理解,展现了孟子对孔子美学思想的深化和拓展。 在探讨孟子对孔子人格美学的继承和发展时,我们不难发现孟子在理论和实践上的创新。孟子认同孔子以“仁义”作为衡量人格美的标准,并进一步...
财产继承权管理涉及的是在个人去世后,其财产如何按照法律规定转移给亲属或指定受益人的法律和财务问题。在这个主题中,有几个关键概念需要理解: 1. **遗产**:遗产是指被继承人在去世时遗留下来的个人合法财产。...