`
郑惠铭
  • 浏览: 7791 次
  • 性别: Icon_minigender_2
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

类的继承的总结

阅读更多
类的继承的总结
类继承是为了提高代码的重用性!

一、Java继承的语法格式:

继承的关键字:extends
格式:
public class 类名(子类、超类、派生类) extends 类名(父类、基类) {

}
注意:Java的继承是单继承(一个子类只能继承一个父类),表示extends后边只能加一个类名。

二、子类能继承到什么?又能使用什么?

1.子类能继承到父类所有的属性和方法。

2.子类能调用的方法:
   
        1).当子类和父类同包:默认的、受保护的、公有的属性和方法能被子类的对象和子类{}中调用。

2).当子类和父类不同包:子类对象能调用的只有:公有的属性和方法
       子类的{}中能调用的属性和方法有:公有的、受保护的

3.属性和方法是否能够被调用取决于Java的访问修饰符。

private         不论子类和父类是否同包,都不能被子类的对象和子类{}直接调用。
默认的         在子类和父类同包的情况下,能被子类的对象和子类{}调用。

protected 在子类和父类同包的情况下能被子类的对象和子类{}中调用,在子类和父类不同包的情况下能被子类的{}调用。

public          不论子类和父类是否同包,都能够被子类的对象和子类{}调用。

三、方法重写

1.实现方法重写的条件:
1).必须要存在继承关系。
2).返回值数据类型、方法名、参数个数、参数类型和参数顺序必须要和父类方法的完全一致。
3).子类重写方法时,方法的访问修饰符可以大于或者等于父类方法的访问修饰符。

  exp: 默认-->protected-->public

2.重写后的方法是如何调用的呢?
1)会优先执行子类的方法,子类没有的时候才会执行父类的方法。
2)如果想调用父类的方法,那么可以使用super.方法名();
3)super(name,score);//调用父类中带两个参数的构造方法

    N.B:a.调用父类中的构造方法必须放在该类中的第一行,调用父类中的普通方法则无此讲究。
        b.当左边出现三角形符号说明重写父类的方法成功。

四、自动转型

exp:  
父类  对象名 = new 子类();
Student stu = new UNStudent("无名",5);

1.为什么父类无法调用子类自己定义的方法?
       答:简单的说就是,儿子可以继承父亲的所有财产,而父亲却不可以干涉儿子的财产。

2.为什么Java还会保留自动转型呢?
答:为了扩大使用范围。

exp:  学校有英语老师,教的是大学生,但她也可以去教高中生,初中生,小学生,幼儿园的学生,其他类的学生。
teach(UNStudent un){
大学生
}
teach(XStudent un){
小学生
}

teach(Student stu){
stu.study();
}
五、多态
1.概念:一个方法名可以通过不同参数(参数名,参数个数)来重复使用,表示不同的意思。即一个名字多种功能用法。

2.多态的实现:相同类型的对象调用相同方法的时候,由于继承和重写机制,得到的结果不一定相同。只有到运行时,才知道到底是什么。

3.多态和重载的区别:重载是多态的一部分
/************************练习*****************************/

回合制游戏:奥特曼和小怪兽要战斗,直到一方的血量为0的时候结束战斗,输出谁胜利了!
  奥特曼除了可以打小怪兽外,还可以攻击其他的奥特曼对象。
  小怪兽除了可以打奥特曼外,还可以攻击其他的小怪兽对象。

1. 思路:先定义一个角色类作为父类,再定义一个奥特曼类和一个小怪兽类作为角色类的子类。在奥特曼类中定义两个奥特曼对象,在小怪兽类里同样也定义两个小怪兽对象。最后在主函数中调用它们父类中的战斗方法,模拟战斗场景。

2. 分析:
对象:正版奥特曼、盗版奥特曼、小怪兽1号、小怪兽2号
特征:姓名、属性
行为:战斗

3. 具体代码如下:
1)package War;//定义一个角色类作为父类

public class Player {

      private String name;//姓名属性
      private int blood;//血量属性
     
/**
*name赋给姓名属性的参数
* blood赋给血量属性的参数
*/
   public Player(String name,int blood){
     this.name=name;
     this.blood=blood;
   }
  
   //设置姓名属性值的方法
   public void setName(String name){
    this.name=name;
   }
       //获取姓名属性值的方法
   public String getName(){
   return name;
   }
  
   //设置血量属性值的方法
   public void setBlood(int blood){
   this.blood=blood;
   }
   //获取血量属性值的方法
   public int getBlood(){
   return blood;
   }
  
   //定义一个战斗方法
   public void fighting(Player player){
   player.setBlood(player.getBlood()-1);
   System.out.println(name+"攻击"+player.getName()+","+"对方血量减1,仅剩"+player.getBlood());
   }
}


2)package War;//定义一个Aoteman类,它继承自Player类

public class Aoteman extends Player{

/**
* 调用父类中两个带参数的构造方法
*/
public Aoteman(String name,int blood){
      super(name,blood);
}




}

3)package War;//定义一个Monster类,它继承自Player

public class Monster extends Player{

/**
* 调用父类中两个带参数的构造方法
*/
public Monster(String name,int blood){
      super(name,blood);
}



}

4)package War;//定义一个战斗类,模拟战斗场景

public class Fight {

/**
* 定义一个入口主函数
*/
public static void main(String[] args) {
//实例化Aoteman类的对象
        Aoteman zbao=new Aoteman("正版奥特曼",10);
        Aoteman dbao=new Aoteman("盗版奥特曼",5);
       
        //实例化Monster类的对象
        Monster mon1=new Monster("小怪兽1号",5);
        Monster mon2=new Monster("小怪兽2号",3);
       
        /******************开始战斗************************/
       
       
    //先令正版奥特曼与小怪兽1号战斗
          while(mon1.getBlood()>0&&zbao.getBlood()>0){
       
        zbao.fighting(mon1);
       
        //如果小怪兽1号的血量值为0,输出结果,进入下一循环
        if(mon1.getBlood()==0){
        System.out.println("小怪兽1号战死!正版奥特曼胜利!他将与盗版奥特曼战斗!");
              
        while(dbao.getBlood()>0&&zbao.getBlood()>0){
        zbao.fighting(dbao);
        dbao.fighting(zbao);
        //如果正版奥特曼的血量为0,输出结果
        if(zbao.getBlood()==0){
        System.out.println("正版奥特曼战死!盗版奥特曼战胜!");
        break;
        }
        //如果盗版奥特曼的血量为0,输出结果
        else if(dbao.getBlood()==0){
        System.out.println("盗版奥特曼战死!正版奥特曼战胜!");
        break;
        }
        }
        break;
        }
                  
       
        mon1.fighting(zbao);
       
        //如果正版奥特曼的血量值为0,输出结果,进入下一循环
        if(zbao.getBlood()==0){
        System.out.println("正版奥特曼战死!小怪兽1号胜利!它即将与小怪兽2号自相残杀!");
              
        while(mon1.getBlood()>0&&mon2.getBlood()>0){
        mon1.fighting(mon2);
        mon2.fighting(mon1);
        //如果小怪兽1号的血量为0,输出结果
        if(mon1.getBlood()==0){
        System.out.println("小怪兽1号战死!小怪兽2号战胜!");
        break;
        }
        //如果小怪兽2号的血量为0,输出结果
        else if(mon2.getBlood()==0){
        System.out.println("小怪兽2号战死!小怪兽1号战胜!");
        break;
        }
        }
        break;
        }
       
       
       
        }
}

}

4.写代码时应注意的问题:
a.不要老是忘记跳出循环了好不好!
b.不要老是想着把一些数据定死了(比如设定战斗次数)!为用户着想,也是为自己着想!
c.继承的时候,当你需要“重写”的时候再加上带有“super”的东东,不然都不用写,你的子类已经继承好父类中的所有了亲!~
d.java里的语句一般是从上至下执行的,一些需要使用的参数要在使用前就定义好哦~
分享到:
评论

相关推荐

    封装继承多态总结

    封装继承多态总结

    JAVA中的继承学习总结

    继承是面向对象编程(OOP)的一个核心概念,它使得我们可以定义一个类继承另一个类的字段和方法。这样做的好处是可以减少代码冗余,提高代码复用性。在Java中,继承通过`extends`关键字实现。Java中的继承支持单继承,...

    继承和抽象类的总结

    这个文档总结概括了继承和抽象类的相关知识以及需要注意的事项

    Java实验报告——类的继承、多态的应用

    总结来说,这个实验报告通过实际编程练习,帮助我们巩固了Java中抽象类和抽象方法的定义,以及类的继承和多态性这两个核心概念。通过设计和实现学生管理类,我们可以更深入地理解这些概念在实际问题解决中的应用。

    Java--类的继承

    本文将深入探讨类继承的实现、作用以及相关的Java特性。 1. 类继承的实现和作用: 类继承通过使用关键字`extends`来实现。例如,`class ChildClass extends ParentClass`表明ChildClass是ParentClass的子类。继承...

    表面积和体积_抽象类Shape_shape类继承_

    总结来说,"表面积和体积_抽象类Shape_shape类继承_"的主题展示了如何利用C++的面向对象特性来设计和实现一个计算几何形状表面积和体积的程序。通过抽象类`Shape`定义通用接口,然后由具体的形状类(如`Cube`、`...

    (2)Hibernate3.2 中的类继承关系

    总结来说,Hibernate 3.2在处理类继承时提供了丰富的策略,开发人员可以根据具体需求选择合适的方式。理解和掌握这些策略有助于构建高效、可维护的ORM模型。通过`@Inheritance`注解和相应的配置,我们可以实现对象和...

    关于类与继承和相关基础东西总结

    在编程世界中,类与继承是面向对象编程(OOP)的核心概念,它们构成了许多现代编程语言的基础。本文将深入探讨这两个概念,并结合实际应用场景,帮助你更好地理解它们。 首先,我们来谈谈“类”。在OOP中,类可以...

    继承与派生总结

    c++继承与派生总结 面向对象的程序设计中提供了类的继承机制,允许...以原有的类为基础产生新的类,我们就说新类继承了原有类的特征,也就是说从原有类派生了新类。 类的派生机制的好处在于:代码的重用和可扩充性。

    类的继承、抽象类、虚方法实现

    抽象类是一种不能被实例化的类,它用于定义共同接口,供其他类继承。在C#中,我们使用`abstract`关键字声明抽象类。例如,我们可能有一个`Animal`抽象类,其中包含一个抽象方法`MakeSound()`: ```csharp public ...

    java的继承总结.doc

    "Java继承总结" Java中的继承是面向对象三大特性之一,在知识点上存在许多重要的细节。下面将对Java继承的基本概念、语法格式、继承关系、方法重写、自动转型等进行详细的总结和分析。 一、继承的基本概念 继承是...

    C++继承与派生类实验报告

    C++继承与派生类是面向对象编程的重要概念,它们允许我们创建新的类,这些类可以从现有的类(称为基类或父类)继承属性和行为。在这个实验中,我们将深入理解这两个概念,并通过实际编程练习来巩固它们。 一、继承...

    c#中类的继承

    本篇文章将详细介绍C#中的类继承,包括如何实现继承、构造函数在继承中的作用、以及重载、重写和隐藏的概念。 #### 二、实现继承 在C#中,实现类的继承非常简单。只需在定义子类时,在类名后面加上冒号 `:`,紧...

    C++类总结多态继承

    ### C++类总结多态继承 #### 一、C++ 类的基本概念 1. **注意事项** - 在定义数据成员时不能直接给数据成员赋初值。这是因为类本身仅是一种类型,类中的数据成员并不实际占用内存空间。数据成员的初始化应该在...

    java实验三 类的继承--圆.rar

    实验报告可能会涵盖以下内容:实验目的(理解并掌握类的继承)、实验步骤(定义`Shape`和`Circle`类,实现相关方法)、实验结果(展示代码运行输出,如圆形面积的计算)以及实验总结(类继承的概念及其在实际编程中...

    类的继承与派生实验

    - 示例代码中,`Vehicle` 类的成员 `Maxspeed` 和 `Weight` 被 `Bicycle`、`Car` 和 `MotorCycle` 派生类继承,且能够通过派生类的 `Show` 方法进行访问。 3. 构造函数与析构函数的调用顺序: - 当创建派生类的...

    c++继承分类

    7. 小结和最佳实践:总结继承的使用场景,提供关于何时以及如何使用继承的最佳实践。 通过学习这个视频教程,你将更好地理解C++继承的概念,并能熟练地在Qt开发中应用这些知识,创建出功能丰富、结构清晰的程序。

    WPF继承_子类继承父类,实现跨类调用方法

    - 在C#中,我们使用`:`符号来表示一个类继承自另一个类。例如,如果`ChildClass`继承自`ParentClass`,代码会写作`public class ChildClass : ParentClass {}`。 - 子类继承父类后,将自动获得所有非私有(public...

    C++不能继承的类

    在C++编程语言中,有时候我们可能需要创建一个类,使其不能被其他类继承,以保护类的结构和防止不合理的扩展。标题所提到的"不能继承的类",其目的是为了实现一种类的封闭性,确保其设计的意图不被误用。描述中提到...

    Lua 类的继承与函数override

    这里 `Student` 类继承了 `Person` 类,添加了一个新的属性 `grade` 并重写了 `sayHello` 方法。当我们创建一个 `Student` 对象时,它不仅具有 `Person` 的所有属性和方法,还增加了自己的特性。 最后,我们谈谈...

Global site tag (gtag.js) - Google Analytics