1.最後のキーワード
プロパティ (メンバー変数)、メソッド、クラスを宣言するために使用されます。
1.1最終的な属性の割り当て
- 宣言と同時に値を割り当てます。多くの場合、static と併用されます (使用後、メソッド領域にはコピーが 1 つだけ存在します)。
- 宣言時に値は代入されず、コンストラクタ内で一つずつ値を代入する必要があります。
- 各オブジェクトを作成するとき、最終的な属性の値が正しい
1.2最終修正
パラメーターに最終的な変更を加える: メソッドのパラメーターの前に Final キーワードを追加して、メソッド本体内のデータが変更されないようにします。
例:
//final 修饰的类不可以被继承
public class FinalDemo {
//final+static 修饰的在方法区是唯一的
final static int num = 0;
final String name;
//每次创建的name都是唯一的
public FinalDemo(String name) {
this.name = name;
}
//final修饰的方法不可以重写
public final void first(){
System.out.println("我就是我,不一样的烟花");
}
public static void main(String[] args) {
FinalDemo finalDemo = new FinalDemo("小黑子");
System.out.println("我是"+finalDemo.name);
}
}
public class Final1 extends FinalDemo{
public Final1(String name) {
super(name);
}
}
public class Test {
public static void main(String[] args) {
FinalDemo finalDemo = new FinalDemo("鸡哥");
System.out.println("我的名字是"+finalDemo.name);
finalDemo.first();
Final1 final1 = new Final1("小红");
System.out.println("我的名字是"+final1.name);
final1.first();
}
}
結果:
2. インターフェース
2.1 インターフェースの定義
インターフェイスの定義: インターフェイスを宣言するには、interface キーワードを使用します。
[アクセス修飾子] インターフェイス インターフェイス名 [他のインターフェイス名 1,….他のインターフェイス名 n を拡張]
{
// 定数抽象メソッド、静的メソッド、デフォルトメソッドを宣言
}
2.2 インターフェースの使用
クラスは、implements キーワードを使用してインターフェイスを実装します。クラス宣言では、Implements キーワードはクラス宣言の後に配置されます。
[アクセス修飾子] class クラス名はインターフェイス名 1、インターフェイス名 2...{ } を実装します。
結合された継承:
[アクセス修飾子] class クラス名は親クラス名を拡張し、インターフェイス名 1、インターフェイス名 2...{ } を実装します。
2.3 インターフェースの特徴
インターフェイスの特性:
• インターフェイスは暗黙的に抽象であるため、インターフェイスを宣言するときに、abstract キーワードを使用する必要はありません。
• インターフェース内のメソッドは抽象、静的、またはデフォルトにすることができます。
• インターフェイスで宣言されたプロパティは、デフォルトでは public static Final です。
• インターフェイスはクラスによって継承されませんが、クラスによって実装されます。
• インターフェイスはオブジェクトをインスタンス化できません。
• 継承と同様に、インターフェイスと実装クラスの間にポリモーフィズムが存在します。
• インターフェイスは他の複数のインターフェイスを継承できます。
• クラスがインターフェイスを実装する場合、クラスはインターフェイス内のすべての抽象メソッドを実装する必要があります。それ以外の場合は、クラスを抽象として宣言する必要があります
例:
public class Animal {
String name;
int age;
public void eat(){
}
}
public interface Run {
void run();
}
public interface Swim {
void swim();
public default void test1(){
//创建默认方法
System.out.println("默认方法");
}
public static void test2(){
System.out.println("静态方法");
}
}
public class Cat extends Animal implements Run,Swim {
@Override
public void run() {
System.out.println("小猫会跑");
}
@Override
public void swim() {
System.out.println("小猫会游泳");
}
}
public class Cow implements Run {
@Override
public void run() {
System.out.println("哞儿~,快跑");
}
}
public class Test {
public static void main(String[] args) {
Cat cat = new Cat();
cat.age=18;
System.out.println(cat.age);
cat.name="咪咪";
System.out.println(cat.name);
cat.eat();
cat.run();
cat.swim();
Run run = new Cat();
run.run();
Swim swim = new Cat();
swim.swim();
Swim.test2();
//静态方法通过接口名访问
cat.test1();
//默认方法通过子类创建的对象访问
}
}