[Javaの定式]CHAPTER 7:オブジェクト向けプログラミングII
21629 ワード
1.継承
継承とは?
受け継がれた長所?
プログラムにエラーが発生した原因の1つは,重複するコードに正しく変更された箇所があるかどうかである.
Parentクラスにageという整数型変数をメンバー変数として追加すると、ChildクラスはParentクラスのすべてのメンバーを継承します.
クラスを繰り返し使用する2つの方法:継承vsは
public class DrewShape {
public static void main(String[] args) {
Point[] p = {
new Point(100, 100),
new Point(140, 50),
new Point(200, 100)
};
Triangle t = new Triangle(p);
Circle c = new Circle(p[1], 50);
t.draw();
c.drew();
}
}
class Shape{
String color = "black";
void draw() {
System.out.printf("[color = %s]%n", color);
}
}
class Point{
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
Point() {
this(0, 0);
}
String getXY() {
return "(" + x + "," + y + ")";
}
}
class Circle extends Shape { //상속
Point center; // 포함
int r;
Circle() {
this(new Point(0, 0), 100);
}
Circle(Point center, int r) {
this.center = center;
this.r = r;
}
void drew() {
System.out.printf("[center = (%d, %d), r = %d, color = %s]%n", center.x, center.y, r, color);
}
}
class Triangle extends Shape{
Point[] p = new Point[3];
Triangle(Point[] p) {
this.p = p;
}
void draw() {
System.out.printf("[p1 = %s, p2 = %s, p3 = %s, color = %s]%n", p[0].getXY(), p[1].getXY(), p[2].getXY(), color);
}
}
Javaは単一の継承のみを許可するのはなぜですか?2つの親が同じメソッドを持っている場合、子がどの親メソッドを継承すべきかという問題を解決します(静的メソッドの場合、メソッド名の前にクラス名を付けて区別できますが、インスタンスメソッドは使用できません).
また,クラス間の関係がより明確になり,コードがより信頼できるという利点がある.
2.大げさ
オーバーライドとは?
すなわち、
上書き条件
サブクラスで上書きする方法は、祖先クラスの方法です.
ただし、限られた条件でしか変更できません.
かもしれません.しかし、これはクラスごとに個別の静的メソッドを定義しただけです.これは大げさではない.
過負荷と過負荷
super
super()-祖先クラスの作成者
public class PointTest2 {
public static void main(String[] args) {
Point3D p3 = new Point3D();
System.out.println("p3.x = " + p3.x);
System.out.println("p3.y = " + p3.y);
System.out.println("p3.z = " + p3.z);
}
}
class Point {
int x = 10;
int y = 20;
Point(int x, int y) {
//생성자 첫줄엥서 다른 생성자를 호출하지 않기 때문에 컴파일러가 'super();'를 여기에 삽입한다.
this.x = x;
this.y = y;
}
}
class Point3D extends Point{
int z = 30;
Point3D() {
this(100, 200, 300);
}
Point3D(int x, int y, int z) {
super(x, y);
this.z = z;
}
}
以下に、上記のコードのジェネレータ呼び出し順序を示します.Point3D -> Point3D(int x, int y, int z) -> Point(int x, int y) -> Object()
义齿
セットメニューは何ですか。
静的インポート文
System.out.println(Math.random())
static import文が宣言された場合、import static java.lang.Integer.*;
import static java.lang.Math.random;
import static java.lang.System.out;
out.println(random())
Reference
この問題について([Javaの定式]CHAPTER 7:オブジェクト向けプログラミングII), 我々は、より多くの情報をここで見つけました https://velog.io/@haron/자바의-정석-CHAPTER-7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol