美文网首页javascript那些事
ES6中类与继承的理解(java对比记忆)

ES6中类与继承的理解(java对比记忆)

作者: 程序员成长指北 | 来源:发表于2019-06-01 18:29 被阅读1次

ES6中类与继承的理解(java对比记忆)

先上两段代码:
java中定义类:

public class Person{
   private String sex;
   private int age;
   
   public Person(String sex,int age){
    this.sex=sex;
    this.age=age;
   }
    public void getInfo(){ 
     System.out.println(sex+age);
      }
}

Es6中定义一个类:

class Person{
       constructor(sex,age){
          this.sex=sex;
          this.age=age;
}
getInfo(){
return this.sex+','+this.age;
}
//调用
let person=new Person("xiaogangzai","23");

通过上面两端代码引入我们今天要说的相关内容,

类中的构造函数

  • 二者同:

如果声明一个一个类的时候没有声明构造函数,那么会默认添加一个空的构造函数,构造函数在new实例化一个对象的时候会被调用

  • 二者异:

在ES6中,可以在构造函数中直接定义类方法(类方法也可以是箭头函数),代码如下

constructor(sex,age){
          this.sex=sex;
          this.age=age;
          this.getInfo()=()=>{
              console.log("name"+this.name+"sex"+this.sex);
             }         
 } 

类中的方法

  • 二者同:

有参,无参函数,函数调用方式相同。静态方法,ES6中用static声明一个静态方法,方法只能用类名直接调用,不能通过类的实例调用

  • 二者异:

ES6在类中声明函数,无需使用function关键字,java的类中必须使用关键字声明函数。

ES6方法内部访问类属性的时候需要this来访问,java不需要。

ES6的构造函数中可以定义函数,java不可。

类中的继承

  • 二者同:

继承关键字都是extends,super方法的使用

  • 二者异:

继承的调用:

ES6需要注意的是super只能调用父类方法,而不能调用父类的属性,方法定义再原型链中,属性定义在类的内部

java中,super关键字,可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。

继承过程中的构造函数:

ES6中,子类中,super方法是必须调用的,因为子类本身没有自身的this对象,需要通过super方法拿到父类的this对象。在子类中,没有构造函数,那么在默认的构造方法内部自动调用super方法,继承父类的全部属性,子类的构造方法中,必须先调用super方法,然后才能调用this关键字声明其它属性。(子类的this就是在这里调用super之后,拿到父类的this,然后修改这个this来的)

class Student extends Person{
constructor(name,sex){
console.log(this);//Error
super(name,sex);
this.sex=sex;
}
}

java中,子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式)。如果父类的构造器带有参数,则必须在子类的构造器中显式地通过 super 关键字调用父类的构造器并配以适当的参数列表。

如果父类构造器没有参数,则在子类的构造器中不需要使用 super 关键字调用父类构造器,系统会自动调用父类的无参构造器。

看一段面试问的比较多的代码实例:

class SuperClass {
  private int n;
  SuperClass(){
    System.out.println("SuperClass()");
  }
  SuperClass(int n) {
    System.out.println("SuperClass(int n)");
    this.n = n;
  }
}
class SubClass extends SuperClass{
  private int n;
  
  SubClass(){
    super(300);
    System.out.println("SubClass");
  }  
  
  public SubClass(int n){
    System.out.println("SubClass(int n):"+n);
    this.n = n;
  }
}
public class TestSuperSub{
  public static void main (String args[]){
    SubClass sc = new SubClass();
    SubClass sc2 = new SubClass(200); 
  }
}

输出结果:

SuperClass(int n)
SubClass
SuperClass()
SubClass(int n):200

附录:
java中的继承 http://www.runoob.com/java/java-inheritance.html

<center>觉得本文对你有帮助?请分享给更多人<center>

我的公众号.jpg

欢迎大家关注我的公众号——程序员成长指北。请自行微信搜索——“程序员成长指北”

相关文章

  • ES6中类与继承的理解(java对比记忆)

    ES6中类与继承的理解(java对比记忆) 先上两段代码:java中定义类: Es6中定义一个类: 通过上面两端代...

  • ES的类与继承

    ES5中的类与继承 构造函数继承,原型继承,组合式继承 静态方法,静态属性,实例方法,实例属性 ES6中的类与继承...

  • ES6

    ES6是一个语言标准,不是一个框架。 ES6中的class与继承 class是创建类对象与实现类继承的语法糖,旨在...

  • JAVA(9)继承与多态

    继承与多态 、抽象类、接口 继承: 继承是类与类的一种关系 java中的继承是单继承 继承的好处: 子类拥有父类的...

  • 2.3 继承 (面向对象)

    1、Java中的继承 继承是类与类的一种关系Java中的继承是单继承的,即每个子类只有一个父类 继承的好处子类拥有...

  • JavaScript中的复用和抽象

    复用、抽象 JavaScript实现方式 模拟Java中的类有new、this,但是缺少继承等关键特性,ES6开始...

  • 面向对象类

    类与实例 类的声明 ES5 ES6 生成实例 类与继承 如何实现继承 继承的几种方式 原型链是实现继承的主要方法 ...

  • Kotlin随笔,这次坚持不太监

    Kotlin中的类与继承 Java三大特性继承、多态、封装Java学习中首先学习的是类的构建,那么必然要学习构造方...

  • es5 es6静态方法、类、单例模式

    es5中的类和静态方法 es5继承 es6中的类 es6里面的继承 es6里面的静态方法 es6单例模式 转载:h...

  • 快速学习Scala之继承

    类的继承 在Scala中让子类继承父类与Java一样也是使用extends关键字。继承就代表子类可以从父类继承父类...

网友评论

    本文标题:ES6中类与继承的理解(java对比记忆)

    本文链接:https://www.haomeiwen.com/subject/tswatctx.html