类与对象
类:一些有相同属性和行为方式的事物的集合。
对象:一个具体事物。
类是对象的模板。
对象 -> 类 称为抽象化
类 -> 对象 称为实例化
类的定义方式
-
头文件 :
packge 类文件的包路径
import 外部或Java库中的类的包路径; -
类 :
public class 类名CLASSTest{}; -
主函数 :
public class 类名CLASSTest{
System.out.println(“Hello”+i); //打印输出语句(换行)
System.out.print(“Hello”+i); //打印输出语句(不换行)(类名 )CLASSTest (对象变量名)ct = new (类名)CLASSTest();//实例化
//主函数中调用方法和属性
}; -
属性的声明 :访问修饰符(public 默认) 属性的类型 属性变量名=属性值; int i=10;
-
方法的创建 :访问修饰符 返回值类型 方法名(参数类型 参数变量名){};
-
属性和方法的调用 :
在本类中:直接使用属性名/方法名();的方式调用;
非本类和主函数中: 使用此属性\方法所属的类的对象来调用;
示例
package 类与对象;
public class SunWuKong {
String name;
int id;
int age;
int ad;
int hp;
//吃
public void eat(Food food) {
System.out.println(name+"吃了"+food.name);
}
//攻击
public void ack(NeZha nz) {
nz.hp-=ad;
System.out.println(name+"攻击了"+nz.name+"使其失去了"+ad+"其还剩下"+nz.hp);
}
public static void main(String[] args) {
SunWuKong swk = new SunWuKong();
swk.name="[贪吃孙悟空]";
swk.age=500;
swk.id=10086;
swk.ad=400;
swk.hp=9999;
Food food = new Food();
food.name="蟠桃";
swk.eat(food);
}
继承
继承关键字: extend
格式: 子类 extends 父
子类继承父类所有属性和方法。
子类: 除受访问修饰符限制的属性和方法,皆可以直接调用;
子类对象: 除开受访问修饰符限制的属性和方法,通过子类对象可以调用;
方法重写
与父类一样的地方: 访问修饰符 返回值类型 方法名(参数类型 ){ }
与父类不一样的地方:方法体
子类对象会调用重写之后的方法
自动转型
强制转型:父类名 对象变量名=new 子类名();
函数调用时,子类可以自动转型成父类
注意:子类对象在自动转型为父类类型后,不能调用父类中没有而子类中有的方法;
示例
使用继承的概念进行重构,使得孙悟空,哪吒,牛魔王三者之间可以互相攻击。
父类Hero
public class Hero {
//有子类共有的属性
String name;
int hp;
int ad
//相同的方法
public void ack(Hero h) {
h.hp-=ad;
System.out.println(name+"攻击了"+h.name+"使其失去了"+ad+"点生命值,其还剩下"+h.hp+"点生命值");
}
}
子类SunWuKong
public class SunWuKong extends Hero{
public void ack(Hero h){
super.ack(h);
h.hp-=ad*2;
System.out.println(name+"两次攻击了"+h.name+"使其失去了"+ad*2+"点生命值,其还剩下"+h.hp+"点生命值");
}
public void huifu(){
hp+=ad*3;
System.out.println(name+"恢复了"+ad*3+"点生命值,其还剩下"+hp+"点生命值");
}
子类NeZha
public class NeZha extends Hero {
public void ack(Hero h){
super.ack(h);
this.hp+=55;
System.out.println(this.name+"恢复了55点生命值,其还剩下"+this.hp+"点生命值");
}
}
子类NiuMoWang
public class NiuMoWang extends Hero{
public void ack(Hero h){
super.ack(h);
}
}
场景类Manage
public class Manage {
public static void main(String[] args){
SunWuKong swk=new SunWuKong();
swk.name="孙悟空";
swk.ad = 233;
swk.hp = 6523;
NeZha nz = new NeZha();
nz.name = "哪吒";
nz.ad = 212;
nz.hp = 6652;
NiuMoWang nmw = new NiuMoWang();
nmw.name = "牛魔王";
nmw.ad = 331;
nmw.hp = 5748;
while (swk.hp>0&&nz.hp>0) {
swk.ack(nz);
if (nz.hp>0)
nz.ack(swk);
}
if (swk.hp>0) {
System.out.println(swk.name+"Win");
swk.huifu();
while (swk.hp>0&&nmw.hp>0) {
swk.ack(nmw);
if (nmw.hp>0)
nmw.ack(swk);
}
if(swk.hp>0){
System.out.println(swk.name+"Win");
}else{
System.out.println(nmw.name+"Win");
}
}else {
System.out.println(nz.name+"Win");
while (nz.hp>0&&nmw.hp>0) {
nz.ack(nmw);
if (nmw.hp>0)
nmw.ack(nz);
}
if(nz.hp>0){
System.out.println(nz.name+"Win");
}else{
System.out.println(nmw.name+"Win");
}
}
}
}
本文深入探讨Java中类与对象的概念,包括类的定义、对象的实例化、属性与方法的使用,以及类与对象之间的关系。同时,文章详细讲解了继承、方法重写和自动转型等高级特性,并通过具体的示例代码,如SunWuKong、NeZha和NiuMoWang的类定义,展示了这些概念的实际应用。

被折叠的 条评论
为什么被折叠?



