0%

Java 笔记(一)

面向对象

继承

1
2
3
4
5
Java: class Student extends Person

C#: : class Student : Person

Python: class Student(Person)

Python 支持 多继承,C#,Java均不支持,C++支持多继承

Java: 当一个类未显式继承任何类时,隐式继承object,这点和C#一致,所有类型最后均继承 Object,即 Object 是所有类 祖先类

实现

1
2
3
4
5
Java: class Student implements IStudy, ISay

C#: class Student : IStudy, ISay

Python: class Student(IStudy, ISay)

Python接口抽象类和抽象方法 去实现

关键词

super

访问父类成员

1
2
3
4
5
6
7
8
9
10
Java: super.  

C#: base.

Python: super().

JavaScript:
访问原型链
Person.prototype.msg = "abc"
pObj.__proto__.hello = function () {}

this

指向自己的引用

1
2
3
4
5
6
7
Java: this.

C#: this.

Python: self.

JavaScript: this.

final

Java
  1. 修饰类: 最终类,不能被继承
  2. 修饰方法: 不能被子类重写

final class 类名 { }

修饰符(public/private/default/protected) final 返回值类型 方法名(){ }

注:实例变量也可以被定义为 final,
被定义为 final 的变量不能被修改。
被声明为 final 类的方法自动地声明为 final,
但是实例变量并不是 final

C#

该类不能被继承
sealed class 类名 { }

sealed 修饰方法或属性 可允许 类从基类继承,并防止它们重写特定的虚方法或虚属性

sealed 对虚方法或虚属性,也就是同 override 一起使用,若非虚方法或虚属性 会报出错误: cannot be sealed because it is not an override

1
2
3
4
protected sealed override void N()
{
Console.WriteLine("B.N()");
}

该方法无法被重写,只要此方法未被标记为 virtual
不过无法被重写,可以被覆盖

显式 覆盖 从父类继承来的方法
public new SameMethod() { }

构造器

构造器就是一方法/函数
方法名与类名相同,可以有多个构造器,允许重载

C#

与 Java 相同

Python

1
def  __ init__(self,arg1,arg2,...):

JavaScript

1
2
3
4
5
6
Person(name, gender) {
this.name = name;
this.gender = gender;
}

var p = new Person("eeee", "man");

JS 的面向对象和其它不同,可以说是面向原型

构造函数完全就是一方法,只是规范此方法首字母大写

访问控制修饰符

Java

保护对类、变量、方法和构造方法的访问
Java 支持 4 种不同 访问权限

  • default(即默认,什么也不写):
    在同一包内可见,不使用任何修饰符。
    使用对象:类、接口、变量、方法

  • private:在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

  • public : 对所有类可见。使用对象:类、接口、变量、方法

  • protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

C#

1. 修饰类 访问修饰符
  • internal

    • 内部: 同一程序集下可用
  • public

    • 不同程序集可用

注意: 在C#中,命名空间只是为了区别类,为了方便管理类,无法限 制访问程度

2. 修饰类成员 访问修饰符
  • public
    • 公共,所有
  • private
    • 私有
  • protected
    • 自己及子类
3.其它修饰符
  • sealed
    • 自封,不可继承

非访问 修饰符

Java

  • static 修饰符,用来修饰类方法和类变量。

  • final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。

  • abstract 修饰符,用来创建抽象类和抽象方法。

  • synchronized 和 volatile 修饰符,主要用于线程的编程。