1. 类的继承
类和类之间可以实现继承关系,即从一个类中继承它的部分属性和部分方法,避免重写代码,提高了代码的重用性。比如武侠小说,言情小说,玄幻小说都属于小说,拥有小说所拥有的属性。继承的格式是public class A extends B,即A继承自B,A称为子类,B称为父类。
子类能用父类的那些方法呢?如果子类和父类同一个文件夹下,则除私有的属性和方法外,其他都能被调用;如果子类父类不同文件夹,但对象在子类外去调用方法,只有公有的方法和属性能被调用;如果不同文件夹下,但是在子类中调用,则公有的和受保护的都能被调用。
2. 方法的重写
如果子类和父类中的方法名字,访问修饰符,返回值和参数值完全相同,则可进行方法重写。方法重写后在子类建立对象之后会优先调用子类上写的方法。
3. 自动转型
实例化对象时候可以这么写
父类名 对象名 = new 子类名();
即父类自动转型为子类;
如果方法在父类里面找不到,则会编译错误。
第一步,public 返回值类型 方法名(父类 父类名)
第二步, 父类 类名=new 子类名(参数。。。);
或者 子类 类名=new 子类名(参数);
第三步,方法名 .方法(子类);
4. interface 接口
接口与类相似,只包含常量和抽象方法。目的是指明多个对象的共同方法。
Public interface 接口名
{
Public static final 数据结构 常量名= 常量;//static final。。。。
Public abstract 返回值类型 方法名(参数…..);//abstract
}
接口中默认的修饰符是public
接口可以继承接口,且可以继承多个接口
接口内的方法只能在类中具体实现
Public class 类名 implements 接口,。。。。。。{
接口中所有的抽象方法必须能得到实现
}
5. 抽象类
Public abstract 抽象类名
{
能定义类中所有的属性,方法;
能定义接口中所有的抽象方法,常量;但定义抽象方法时候必须加abstract。
}
抽象类,接口,类只有类可以实例化对象。
练习实例:角色扮演类战斗,怪物和英雄都是Role的子类
Role class :
public class Role {
private String name;
private int blood,attack,defense;
private int speed;
public void setName(String name)
{
this.name=name;
}
public String getName()
{
return name;
}
public void setBlood(int blood)
{
this.blood=blood;
}
public void setAttack(int attack)
{
this.attack=attack;
}
public void setDefense(int defense)
{
this.defense=defense;
}
public void setSpeed(int speed)
{
this.speed=speed;
}
public int getBlood()
{
return blood;
}
public int getAttack()
{
return attack;
}
public int getDefense()
{
return defense;
}
public int getSpeed()
{
return speed;
}
}
Monster class :
public class Monster extends Role
{
public void NormalAttack(Hero hero)
{
int a,b;
a=hero.getBlood()-(int)(0.8*getAttack()+hero.getDefense());
b=(int)(0.8*getAttack()-hero.getDefense());
hero.setBlood(a);
System.out.println(getName()+"攻击了"+hero.getName()+",使之掉了"+b+"血量");
System.out.println("英雄血量剩余"+hero.getBlood());
}
public void Vampire(Hero hero)
{
int a,b,c;
a=hero.getBlood()-(int)(0.8*getAttack())+hero.getDefense();
c=(int)(0.8*getAttack())-hero.getDefense();
hero.setBlood(a);
b=(int)(c*0.8);
setBlood(getBlood()+b);
System.out.println(getName()+"吸取了"+b+"血量,对"+hero.getName()+"造成"+c+"伤害");
System.out.println("英雄血量剩余"+hero.getBlood()+",怪物血量剩余"+getBlood());
}
}
Hero class:
public class Hero extends Role
{
public void Whirlwind(Monster monster)
{
int a,b;
a=monster.getBlood()-(int)(1.4*getAttack())+getDefense();
monster.setBlood(a);
b=(int)(1.4*getAttack())-getDefense();
System.out.println(getName()+"使用旋风斩攻击"+monster.getName()+"使之掉血"+b);
System.out.println("怪物血量剩余"+monster.getBlood());
}
public void Recovery()
{
setBlood(getBlood()+150);
System.out.println(getName()+"使用圣光术,恢复了150生命值");
System.out.println("英雄血量剩余"+getBlood());
}
public void NormalAttack(Monster monster)
{
int a,b;
a=monster.getBlood()-(int)(0.8*getAttack()+monster.getDefense());
b=(int)(0.8*getAttack()-monster.getDefense());
monster.setBlood(a);
System.out.println(getName()+"使用普通攻击,"+monster.getName()+"损失"+b+"血量.");
System.out.println("怪物血量剩余"+monster.getBlood());
}
}
Fight class:
import java.util.*;
public class Fight {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Hero hero=new Hero();
Monster monster=new Monster();
hero.setName("英雄");
monster.setName("怪物");
hero.setBlood(3000);
monster.setBlood(2800);
hero.setAttack(500);
monster.setAttack(450);
hero.setDefense(150);
monster.setDefense(100);
hero.setSpeed(40);
monster.setSpeed(35);
Random ran1=new Random();
Random ran2=new Random();
//System.out.println("请输入你想扮演的角色,1英雄,2怪物");
//Scanner num=new Scanner(System.in);
//int choose=num.nextInt();
int i;
//if(choose==1)
//{
for(i=1;i>=0;i++)
{
System.out.println(" fight "+i);
//System.out.println("您的角色有以下技能:1.旋风斩 2圣光术 3普通攻击");
if(hero.getSpeed()>monster.getSpeed())
{
int value1=ran1.nextInt(3);
int value2=ran2.nextInt(2);
switch(value1)
{
case 0:
hero.Whirlwind(monster);break;
case 1:
hero.Recovery();break;
case 2:
hero.NormalAttack(monster);break;
}
if(hero.getBlood()<=0 || monster.getBlood()<=0)
break;
switch(value2)
{
case 0:
monster.Vampire(hero);break;
case 1:
monster.NormalAttack(hero);break;
}
if(hero.getBlood()<=0 || monster.getBlood()<=0)
break;
}
}
if(hero.getBlood()>monster.getBlood())
System.out.println("英雄获胜");
else
System.out.println("怪物获胜");
//}
}
}
分享到:
相关推荐
1.继承及继承实例 2.方法重写(Overwrite) 3.super关键字 4.方法重载(Overload) 5.final修饰符 6.abstract修饰符 7.抽象类 8.接口 9.接口和抽象类对比 10.接口和抽象类使用场合实例 11.总结
### JAVA继承基本类、抽象类、接口的区别与联系 #### 一、概述 在Java语言中,类(Class)的设计是面向对象编程的核心之一。Java提供了三种方式来扩展类的功能:基本类、抽象类和接口。这三者之间既有相似之处,也...
Java 类、抽象类、接口和继承是面向对象编程的核心概念,它们构成了 Java 语言的基石。在 Java 中,类是用来封装数据和行为的结构,而对象则是类的实例,具有具体的属性和行为。 1. **类与对象的区别** 类是模板...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,供其他类去实现或继承。在这个练习中,我们将深入理解这两种机制,并通过实际的代码示例和注释来加深理解。 首先,让我们讨论...
"Java抽象类和接口和继承之间关系" Java抽象类和接口是两种不同的概念,它们之间存在着继承关系。在Java中,抽象类(abstract class)和接口(interface)都是用来描述对象的行为和状态的,但它们之间有着明显的...
Java 接口和抽象类 Java 编程语言提供了两种机制来实现面向对象编程的多态性:接口和抽象类。这两种机制使得 Java 应用开发具有灵活性和敏捷性。 抽象类 抽象类是一种特殊的类,它不能被实例化,不能被直接使用,...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们允许我们定义规范,为其他类提供模板或行为指南。让我们深入探讨这两个概念及其在Java中的应用。 首先,我们来理解抽象类。在Java中,抽象类是一...
总结来说,理解和掌握Java中的接口和抽象类是成为一名优秀Java开发者的关键。选择使用哪种方式取决于具体的需求和设计目标,灵活运用它们可以帮助我们编写出更高效、更易于维护的代码。通过阅读"java中接口与抽象类...
### 详细解析Java中抽象类和接口的区别 #### 引言 在面向对象编程中,Java作为一种广泛应用的编程语言,提供了多种方式来实现抽象的概念。其中最常用的两种机制是抽象类(abstract class)和接口(interface)。这...
### Java利用接口和抽象类改写求圆的面积和梯形的面积 #### 深入理解Java的接口和抽象类 在Java编程语言中,接口(Interface)和抽象类(Abstract Class)都是用于实现多态性和代码复用的重要概念。它们都无法被...
Java语言的接口与抽象类是面向对象编程中的关键概念,它们在设计模式和代码组织中起着重要作用。这里我们将深入探讨这两个概念,并分析它们的异同。 首先,接口(Interface)是Java中的一种特殊类型,它通过使用`...
### Java抽象类与接口的区别 #### 一、引言 在Java编程中,抽象类(Abstract Class)与接口(Interface)都是实现抽象的关键工具。它们各自有着独特的优势和适用场景,掌握这两者的区别有助于开发者更好地设计系统...
Java类的继承、抽象类和接口 Java 是一个基于面向对象编程的语言,它具有继承、封装、多态等特性。在本章中,我们将详细介绍 Java 中的类继承、抽象类和接口这些重要概念。 类继承 类继承是面向对象编程的重要...
在Java编程语言中,抽象类和接口是两种重要的面向对象设计概念,它们都用于实现多态性,但各自具有不同的特点和应用场景。了解并熟练掌握它们的区别对于编写高质量的Java代码至关重要。 首先,抽象类是一种不能被...
学生通过对该项目整体框架的搭建和对动物城信息管理等模块的设计与功能实现,训练了学生对项目框架的搭建、类的封装、抽象类定义与继承、接口的定义与接口的实现等Java OOP面向对象知识点的掌握。 本项目主要包括...
在深入探讨Java抽象类与抽象方法之前,我们首先需理解其基本概念以及它们在面向对象编程中的作用。Java作为一种广泛使用的编程语言,提供了多种机制来实现代码的复用性和灵活性,其中抽象类和抽象方法是关键特性之一...
Java中的抽象类(abstract class)和接口(interface)都是用于创建抽象化模型的重要工具,它们在面向对象编程中扮演着核心角色。这两种机制都允许我们定义一组方法的签名,但不提供具体实现,从而实现“设计契约”...
面向对象与Java实现:抽象类、接口的深度解析 面向对象程序设计(OOP)是现代软件工程中的核心概念,它通过封装、继承、多态等特性来构建灵活、可复用和可扩展的代码结构。Java作为一门广泛使用的面向对象语言,提供...
Java抽象类接口与多态PPT教案学习 Java抽象类接口与多态是Java编程语言的核心概念,本篇资源文件将详细介绍Java中的抽象类、接口和多态的概念、特点和应用。 一、抽象类 抽象类是Java中的一种特殊的类,它不能被...
一个使用了接口,抽象类,继承的JAVA类,模拟了计算机的组装过程