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类、抽象类、接口、继承和对象解析 .doc
JAVA 继承基本类、抽象类、接口区别与联系
Java抽象类和接口和继承之间关系 Java抽象类和接口和继承之间关系
java 抽象类与接口的练习,包括代码及注释,个人笔记
学生通过对该项目整体框架的搭建和对动物城信息管理等模块的设计与功能实现,训练了学生对项目框架的搭建、类的封装、抽象类定义与继承、接口的定义与接口的实现等Java OOP面向对象知识点的掌握。 本项目主要包括...
一个使用了接口,抽象类,继承的JAVA类,模拟了计算机的组装过程
精选几道java继承及接口的实例
第5章-Java类的继承、抽象类和接口.doc
类、抽象类、接口、继承和对象(java).doc类、抽象类、接口、继承和对象(java).doc类、抽象类、接口、继承和对象(java).doc类、抽象类、接口、继承和对象(java).doc类、抽象类、接口、继承和对象(java).doc类、抽象类...
面向对象与Java实现(抽象类、接口
JAVA继承、抽象类、接口[汇编].pdf
JAVA继承、抽象类、接口[定义].pdf
1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在...
抽象类是Java中一种特殊的类,它不能被实例化,只能被继承。抽象类主要用于定义一些通用的属性和方法,子类需要实现这些方法。 接口的基本概念 接口是Java中一种特殊的抽象类型,它只包含抽象方法和常量,不包含任何...
JAVA继承,接口,抽象类等练习[参考].pdf
JAVA继承,接口,抽象类等练习[文].pdf
结论:abstract class和Interface是JAVA语言中的两种定义抽象类的方式。Interface将abstract的概念作了更进一步的发挥。你可以想像Interface是“纯粹”的 abstract class,只可以包含抽象方法,也包括一些常量的定义...
抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是...在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。 接口: 接口(英文:
主要介绍了Java基础教程之接口的继承与抽象类,本文介绍了接口继承、接口的多重继承以及抽象类的知识,需要的朋友可以参考下