对比几种常用语言的类,实例,类属性、方法,实例属性、方法等

1、类和构造函数

构造函数:初始化实例
实例属性:定义在方法中的变量,只作用于当前实例
实例方法:属于实例的函数

1.js主要靠原型创造对象,ES6出现了class语法糖

class People {
//构造函数
//实例属性 
  constructor(name, age) {
    this.name = name;
    this.age= age;
  }
// 实例方法
  getName() {
    return  this.name;
  }
}
var p=new People()

// 以前的原型写法
function People(name,age){
     this.name = name;
    this.age= age;
}
People.prototype.getName=function(){
    return this.name;
}
...
  1. python
class People:
#构造函数
#name、age实例属性
   def __init__(self, name, age):
      self.name = name
      self.age = age
  # getInfo实例方法
   def getInfo(self):
      print "Name : ", self.name,  ", Salary: ", self.salary

类方法和静态方法

面向对象程序设计中,类方法和静态方法常用术语
逻辑上讲,类方法是只能由类名调用,静态方法可以有类名和对象名进行调用
在c++中,静态方法和类方法逻辑上是等价的,只有一个概念,不会混淆(es6也是)
但python中,分为三类方法,


类属性:所有对象共享,通过类调用
类方法:属于类的方法,只能访问类变量,不能访问实例变量
类方法可以通过类对象或者实例对象调用,用途可修改类属性

python 类属性 类方法 静态方法

1.python里的类属性,类方法

python里的类方法 可通过实例 也可以通过类调用

#!/usr/bin/env python
# -*- coding: utf-8 -*-
class Person:
    country = 'Chinese'    # 类属性
    def __init__(self, name, country):
        self.name = name
        self.country = country

    @classmethod
    def nationality(cls):    # 这里将sefl 改为 cls

        print('Bigberg is %s.' % cls.country)

p = Person('Bigberg', 'CN')

print Person.country #Chinese
Person.nationality() #Bigberg is Chinese.

p.nationality() #Bigberg is Chinese.

2.python里的静态方法

静态方法:静态方法中不需要额外定义参数,因此在静态方法中引用类属性的话,必须通过类对象来引用

class people3:
    country="china"

    @staticmethod
    def getCountry():
        return people3.country

p=people3()
print(p.getCountry())   # 实例调用静态方法 china
print(people3.getCountry())  #类对象调用静态方法 china

注意 python静态方法可以通过实例对象调用,而ES6不行


ES6 静态方法和静态属性

class Foo {
  static classMethod() {
    return 'hello';
  }
}

Foo.classMethod() // 'hello'

var foo = new Foo();
foo.classMethod()
// TypeError: foo.classMethod is not a functio

这里的静态方法又称为类方法,故而也只能使用类 调用方法
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。


java中的面向对象

1.局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
2.成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
3.类变量:类变量也声明在类中,方法体之外,但必须声明为static类型。

public class Dog{
  String breed;
  int age;
  String color;
  void barking(){
  }
 
  void hungry(){
  }
 
  void sleeping(){
  }
}

构造函数:与类同名,可以有多个

public class Puppy{
    public Puppy(){
    }
 
    public Puppy(String name){
        // 这个构造器仅有一个参数:name
    }
}

一个源文件中只能有一个public类

你可能感兴趣的:(对比几种常用语言的类,实例,类属性、方法,实例属性、方法等)