オブジェクト指向の概念では、すべてのオブジェクトがクラスによって表現されることがわかっています。
Java では、クラスはキーワード class によって定義されます。
同様に、Java のクラスにも、通常のクラス、抽象クラス、内部クラスなど、さまざまな形式があります。
内部クラスには、メンバー内部クラス、ローカル内部クラス、匿名内部クラス、静的内部クラスが含まれます。
これについては何も言うことはありません。
public class Demo { }
上で述べたように、すべてのオブジェクトはクラスによって記述されますが、すべてのクラスがオブジェクトの記述に使用されるわけではありません。
クラスに特定のオブジェクトを説明するのに十分な情報が含まれていない場合 (不完全なクラスとして理解できます)、そのようなクラスは 抽象クラス です。
抽象クラスはキーワード absract を介して定義されます。抽象メソッドと非抽象メソッドを含めることができます。
抽象クラス定義
public abstract class Parent {
// 1.成员变量,与普通类无差别
private String word="aa"; // 2.非抽象方法,与普通类无差
private void talk(){
System.out.println("Parent is talking");
} // 3.抽象方法,访问权限只能是 public 和 protected
abstract void print();
}
抽象クラスと抽象メソッドは private によって変更できず、キーワード abstract を使用して定義する必要があります。
サブクラスが抽象クラスではない場合、親クラスのすべての抽象メソッドを実装する必要があります。
抽象クラスはインスタンス化できません。コンパイルエラーです。
抽象クラスには、通常のメソッドとメンバー変数を含めることもできます。
// 1.抽象类继承抽象类,抽象子类不用实现父类的方法public abstract class Son extends Parent { } // 2.普通类继承抽象类,普通子类必须实现父类的所有抽象方法public class Grandson extends Son { @Override void print() { System.out.println("I am Grandson"); } }
// 错误,抽象类不允许被实例化//Parent parent = new Parent();
public class Outter { private int a = 10; static int b = 20; int c = 30; // 内部类 class Inner { void print(int d) { System.out.println(a + "-" +b+ "-" +c+ "-" + "-" +d; } } // 取得内部类 Inner getInner() { return new Inner(); } }
Outter out = new Outter();// 创建内部类的两种方式: Outter.Inner inner = out.new Inner();Outter.Inner inner2 = out.getInner();inner.print(20);
匿名内部クラスは、コンパイル中にシステムによって自動的に Outter$1.class という名前が付けられます。
匿名内部クラスは、通常、他のクラスを継承したり、インターフェイスを実装したりするために使用されます。追加のメソッドを追加する必要はなく、継承されたメソッドを実装または書き換えるだけです。2. サンプルスタディ
javap -v Outter
final 关键字:因为它的特性是一旦变量被赋值后,就不能被修改。
复制:在匿名内部类中直接复制了一个与局部变量值的数,让它变成自己的局部变量。
所以当局部变量的生命周期结束后,匿名内部类照样可以访问 final 类型的局部变量,因为它自己拷贝了一份,且与原局部变量的值始终一致。
下面针对上面的代码来分析:
当 test 方法执行完毕之后,变量 b、c 的生命周期就结束了。然而 Thread 对象的生命周期很可能还没有结束。因此要将 b、c 设置为 final 。
a 之所以不采用 final 修饰,因为它是全局变量,生命周期是随着类的结束而结束。而类的生命周期肯定大于匿名内部类。
静态内部类也是定义在一个类里面的类,只不过在类的前面多了一个关键字static。
静态内部类和静态成员变量其实具有相同的特点:
它只有类有关,与对象无关。因此可以在没有外部类对象情况下,创建静态内部类。
不能访问外部类的非静态成员或方法
内部静态类定义:
public class Outter { int a = 5; static int b = 500; // 静态内部类 static class Inner { public Inner() { // 只能访问外部类的静态成员 System.out.println(b); } } }
静态内部类调用:
// 静态内部类的调用不依赖外部类对象Outter.Inner inner= new Outter.Inner();
接口内部类,顾名思义就是在接口内定义的类。
接口内部类定义:
public interface People{ class Man { public void print() { System.out.println("man.print()..."); } } }
接口内部类调用:
People.Man man = new People.Man();
以上就是04.Java 基础 - 类的内容,更多相关内容请关注PHP中文网(www.php.cn)!