technology_stack:java:oop
差别
这里会显示出您选择的修订版和当前版本之间的差别。
后一修订版 | 前一修订版 | ||
technology_stack:java:oop [2023/03/06 02:39] – 创建 温婕莺 | technology_stack:java:oop [2023/03/06 06:24] (当前版本) – 温婕莺 | ||
---|---|---|---|
行 17: | 行 17: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | 访问类中的变量 -> 使用this变量 | ||
+ | |||
+ | ===== 继承 ===== | ||
+ | |||
+ | extends关键字 | ||
+ | |||
+ | <code java> | ||
+ | class Person { | ||
+ | private String name; | ||
+ | private int age; | ||
+ | |||
+ | public String getName() {...} | ||
+ | public void setName(String name) {...} | ||
+ | public int getAge() {...} | ||
+ | public void setAge(int age) {...} | ||
+ | } | ||
+ | |||
+ | class Student extends Person { | ||
+ | private int score; | ||
+ | |||
+ | public int getScore() { … } | ||
+ | public void setScore(int score) { … } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 继承的特点:子类无法访问父类的private字段或private方法。 | ||
+ | |||
+ | 如果父类使用protected,则可以被子类使用。 | ||
+ | |||
+ | ==== super关键字 ==== | ||
+ | |||
+ | super关键字表示父类(超类)。子类引用父类的字段时,可以用super.fieldName。 | ||
+ | |||
+ | 在父类没有无参数构造函数的时候,就需要使用super(...)方法来构造父类。 | ||
+ | |||
+ | |||
+ | ===== 多态 ===== | ||
+ | |||
+ | Java的实例方法调用是基于运行时的实际类型的动态调用,而非变量的声明类型。即如果子类修改了某一方法,在后续使用父类引用时还是运行的该子类的方法。 | ||
+ | |||
+ | 多态允许添加更多类型的子类实现功能扩展,却不需要修改基于父类的代码。 | ||
+ | |||
+ | ==== 覆写 ==== | ||
+ | |||
+ | 如果子类定义了父类方法签名完全相同的方法,则被称为覆写 (Override)。 | ||
+ | |||
+ | 在函数前进行注解,即 @Override ,可以让编译器帮助检查是否进行了正确的覆写。不过注解是不必须的。 | ||
+ | |||
+ | 如果在子类覆写中,需要调用父类被覆写的方法,可以使用super关键字来调用。 | ||
+ | |||
+ | 继承允许子类覆写父类的方法,如果父类不允许覆写,可以把该方法标记为final。 | ||
+ | |||
+ | |||
+ | ==== 抽象类 ==== | ||
+ | |||
+ | 如果父类的方法没有什么实际意义,只是作为子类覆写的基础。则可以定义成抽象的方法。使用 abstract 来描述。不过该类本身也需要abstract修饰。 | ||
+ | |||
+ | ==== 接口 ==== | ||
+ | |||
+ | 如果某个抽象类没有字段,全是抽象方法,我们可以直接定义成接口类型 interface。 | ||
+ | |||
+ | <code java> | ||
+ | interface Person { | ||
+ | void run(); | ||
+ | String getName(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 当一个具体的class去实现interface时,需要使用 implements 关键字. | ||
+ | |||
+ | <code java> | ||
+ | class Student implements Person { | ||
+ | private String name; | ||
+ | |||
+ | public Student(String name) { | ||
+ | this.name = name; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void run() { | ||
+ | System.out.println(this.name + " run"); | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public String getName() { | ||
+ | return this.name; | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | 在JAVA中,一个类只能继承另一个类,不过接口就可以多重继承。 | ||
+ | |||
+ | ===== 内部类 ===== | ||
+ | |||
+ | 定义在类中的类是内部类。内部类不能独立创建实例,必须依附于一个外部类实例才行,因为内部类中还存在可以访问外部类的方法。 | ||
+ | |||
+ |
/app/www/public/data/attic/technology_stack/java/oop.1678070399.txt.gz · 最后更改: 2023/03/06 02:39 由 温婕莺