zoukankan      html  css  js  c++  java
  • Java类的特点——继承

      java类有四大特点——继承、封装、多态和抽象。今天最主要学习了类的继承的特点,继承也是面向对象编程中最重要的特征之一。它允许通过继承一个已经存在的类,来编写一个新类。很明显,类的继承特点让我们在编写程序的过程中减少了许多重复的代码编写,让程序整体变得简洁,更易分析。我们把已存在的定义好的基础类叫父类或者基类(超类),将新派生出的类叫做子类或者派生类。java中使用“is a”关系判断继承。“is a”关系是一个简单而强大的规则,用于判断父类和子类的继承关系是否正确。java中,一个类使用关键字extends继承其它的类。关键字extends出现在类声明时的类名之后,extends后面跟着的是要继承的类的名称。java不像C++等语言允许子类有多个父类,在java中是不允许一个子类有多个父类的,一个类只能够有一个父类。这也是java语言的目标之一,就是创建一个易于使用和理解的面向对象编程语言。一个java类只能有一个父类,但这并不意味着一个父类不能再有父类,一个java类可以有父类,父类同样可以有父类,一次类推。

      在同一个类和不同类之间有涉及到一个很重要的问题——方法的重写和重载。方法重载是在一个类中发生的,方法名相同,参数列表不同。举个例子,比如我们将人看作一个类,他会炒菜看作一个方法,但是他今天炒了西红柿炒鸡蛋,明天炒了青椒肉丝,每天都炒不同的菜,这就是方法的重载过程。方法的重写则是发生在不同的类中的,方法名相同,参数列表相同同时返回类型也相同。还举上个例子,将人看作一个类,人会做饭看作一个方法,那么男人和女人又可以看作人类下的两个子类,其中男人做饭的话会煮面条、下饺子,而女人做饭会煮饭、炒菜,这两个子类就是将作法这个方法重写。

      子类通过方法重写可以完全改变继承自父类的方法。有时子类想要给继承的方法添加行为,但是并不是完全替换父类的方法。这种情况下可以使用关键字super来调用父类中重写的方法。另外java中还有像final这样的关键字用在不同的地方有着不同的作用。final类:就是一个类被声明为最终类,不能够被子类继承。final方法:声明一个最终方法,不能够被重写。final变量:声明一个常量。

      总结一下java继承类的特点: 

      (1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
      (2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
      (3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
      (4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
      (5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
     
    举个例子来说明类的一些特性
    //定义一个多边形类

    public class Polygon {

      //边数
      public int sides;
      //面积
      public double area;
      public Polygon(int sides){
        this.sides=sides;
        System.out.println("在polygon构造方法中");
      }
      public int getNumberOfSides(){
        System.out.print("多边形的边数:"+sides);
        return sides;
      }
      public String toString(){
        return"这是一个多边形";
      }
    }

    //定义一个三角形子类

    public class Triangel extends Polygon{
      public int base;
      public int height;
      public Triangel(int base,int height){
        //显示调用父类的构造方法
        super(3);
        this.base=base;
        this.height=height;
        System.out.println("在Triangle类的构造方法中");
      }
      public String toString(){
        return "三角形的高:"+height+" 三角形的底"+base;
      }
      public double getArea(){
        area=(base*height)/2;
        return area;
      }
    }

    //定义一个直角三角形子类

    public class RightTriangle extends Triangel{
      //斜边
      public double hypotenuse;
      public RightTriangle(int base,int height){
        super(base,height);
        hypotenuse=Math.sqrt(base*base+height*height);
      }
      public String toString(){
        return super.toString()+hypotenuse;
      }
    }

  • 相关阅读:
    零散
    修改element的内部样式的两种方式
    在vue-cli项目中使用第三方的js,不是es6格式
    Docker知识
    golang使用grpc
    vue中axios导出文件
    nginx、vue和thinkphp配置
    Mysql的一些问题
    数据库索引失效原因
    golang中使用grpc服务
  • 原文地址:https://www.cnblogs.com/leafde/p/3667350.html
Copyright © 2011-2022 走看看