Java学习 之 类与对象

本文深入探讨Java中类与对象的概念,包括类的定义、对象的实例化、属性与方法的使用,以及类与对象之间的关系。同时,文章详细讲解了继承、方法重写和自动转型等高级特性,并通过具体的示例代码,如SunWuKong、NeZha和NiuMoWang的类定义,展示了这些概念的实际应用。

类与对象

:一些有相同属性和行为方式的事物的集合。
对象:一个具体事物。
对象的模板。
对象 -> 称为抽象化
-> 对象 称为实例化

类的定义方式

  1. 头文件
    packge 类文件的包路径
    import 外部或Java库中的类的包路径;


  2. public class 类名CLASSTest{};

  3. 主函数
    public class 类名CLASSTest{
    System.out.println(“Hello”+i); //打印输出语句(换行)
    System.out.print(“Hello”+i); //打印输出语句(不换行)

    (类名 )CLASSTest (对象变量名)ct = new (类名)CLASSTest();//实例化
    //主函数中调用方法和属性
    };

  4. 属性的声明 :访问修饰符(public 默认) 属性的类型 属性变量名=属性值; int i=10;

  5. 方法的创建 :访问修饰符 返回值类型 方法名(参数类型 参数变量名){};

  6. 属性和方法的调用
    在本类中:直接使用属性名/方法名();的方式调用;
    非本类和主函数中: 使用
    此属性\方法所属的类的对象
    来调用;

示例

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");
   }
  }
 }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值