Java拡張オブジェクト
この章は何ですか。
1.abstractキーワード
-特定の値が指定されていない共通のフィーチャーのみが抽出されます.
-宣言されたが実施されていない方法
public abstract class 개발자 { //-> 추상 클래스
abstract void 코딩하다(); // 추상메소드
}
-抽象メソッドの使用->抽象クラス
class Naver extends 개발자 {
@Override
void 코딩하다() {
// 네이버 웹툰을
}
}
class 당근 extends 개발자 {
@Override
void 코딩하다() {
// 물건 판매 채팅을
}
}
class 배민 extends 개발자 {
@Override
void 코딩하다() {
// 티켓 판매 쿠폰을
}
}
長所は?抽象クラスを利用して,サブクラス(NAVER,ニンジン,出前)クラスに強制的に実施することができる.(強制実行漏れの可能性がある部分)
要約すると,抽象クラスは共同開発が必要な部分を記録する部分であると考えられる.
質問?抽象クラスのみを継承して使用しますか?!
私たちが使ったBaseTimeEntityを見てみましょう
@Getter
@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public class BaseTimeEntity {
@CreatedDate // entity가 생성되어 저장될때 시간이 자동 저장
private LocalDateTime createdDate;
@LastModifiedDate // entity 변경할때 시간이 자동 저장
private LocalDateTime modifiedDate;
}
2.静的ブロック
public class global {
public static String tcpIp = "192.168.1.101";
public static String port = 56;
public static String udpIP = "192.168.1.102";
public static int udpPort = 57;
}
public class global {
static {
int port=8080;
String ip="192.168.1.172";
}
}
オブジェクトの静的(共通)として使用される部分に触れますか?!
もし)タッチサービス1,サービス2−>静的HashMapは?!
Mapに変更された値が含まれているため、エラーが発生しました!
このロックを防止できるMapがあります:Concurrent HashMap
Concurrent HashMap
逆に、静的にオブジェクトに触れてもいいですか?!
-答えはノー
静的ブロックで使用可能なプロパティとメソッドは静的メンバーのみです.
オブジェクトメンバーにアクセスできません.
静的ブロックは既にメモリに存在するため、オブジェクトからアクセスできます.
静的ブロックにオブジェクトが見つからないためアクセスできません
3.finalキーワード
- PI(3.141592...)考えてみればよい円の周長と幅は、不変の値で求めることができます.
-このクラスを使用する場合、使用を継承するときに上書きを禁止します.
public class 기밀문서 {
final void MAKED_1급비밀() {
// 절대 보안
}
}
class 공군 extends 기밀문서 {
void MAKED_1급비밀() { // **컴파일 에러 발생!**
}
}
-継承は許可されません.
public final class 기밀문서 { // 상속 허락 안함
}
public class 육군 extends 기밀문서 {} //상속 못함
4.instanceof演算子
作成されたオブジェクトが特定のクラスのインスタンスであるかどうかを尋ねる演算子
結果
class 동물 {
}
class 조류 extends 동물 {
}
class 펭귄 extends 조류 {
}
public class Test{
public static void main(String[] args) {
동물 동물객체=new 동물();
조류 동물객체=new 조류();
펭귄 펭귄객체=new 펭귄();
동물객체 instanceof 동물; // true
조류객체 instanceof 동물; //true
조류객체 instanceof 조류; //true
펭귄객체 instanceof 동물; //true
펭귄객체 instanceof 조류; //true
펭귄객체 instanceof 펭귄; //true
펭귄객체 instanceof Object // true
}
}
동물 동물객체=new 동물();
동물 동물객체=new 조류();
동물 펭귄객체=new 펭귄();
동물객체 instanceof 동물; // true
조류객체 instanceof 동물; //true
조류객체 instanceof 조류; //true
펭귄객체 instanceof 동물; //true
펭귄객체 instanceof 조류; //true
펭귄객체 instanceof 펭귄; //true
펭귄객체 instanceof Object // true
-親タイプのオブジェクトを子タイプのオブジェクトに変換すると、親タイプのプログラムが正常に実行されます.
public int calucate(final Item item) {
return item.calcurate();
}
public int calucate(final Apple apple) {
return apple.calcurate();
}
public class Rectangle {
private int width;
private int height;
public void setWidth(final int width) {
this.width = width;
}
public void setHeight(final int height) {
this.height = height;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
}
public class Square extends Rectangle {
@Override
public void setWidth(final int width) {
super.setWidth(width);
super.setHeight(width);
}
@Override
public void setHeight(final int height) {
super.setWidth(height);
super.setHeight(height);
}
}
-非正方形長方形の場合、上記の方法は正常に動作します.
例えば、横方向が3、縦方向が2の場合、縦方向は4
public void increaseHeight(final Rectangle rectangle) {
if (rectangle.getHeight() <= rectangle.getWidth()) {
rectangle.setHeight(rectangle.getWidth() + 1);
}
}
public void increaseHeight(final Rectangle rectangle) {
if (rectangle instanceof Square) {
throw new IllegalStateException();
}
if (rectangle.getHeight() <= rectangle.getWidth()) {
rectangle.setHeight(rectangle.getWidth() + 1);
}
}
何が間違っていたの?!
-継承が悪い.SquareクラスはRectangleクラスを継承できません.
では、LSPを保護するためにどのように設計すればいいのでしょうか.
継承を使用する場合は、階層図や組織図ではなく、ある~に基づいて継承を利用する必要があります.
5.interfaceキーワードとimplementsキーワード
interface Speakable {
double PI=3.14;
double ZEROPOINT=-275.15;
void sayHello();
}
interface Speakable {
public static final double PI=3.14;
public static final double ZEROPOINT=-275.15;
public abstract void sayHello();
}
6.THISキーワードとSUPERキーワード
THIS-オブジェクトは、自分の代わりに使用するキーワードを指します。
class TT {
int var=10;
void test() {
int var=20;
System.out.println(var); // 20
System.out.println(this.var); //10
}
}
SUPER-上の親のインスタンスを指定するキーワードです。
class 사람 {
void method() {
System.out.println("사람");
}
}
class 네이버 extends 사람 {
void method() {
super.method(); // 사람
System.out.println("네이버"); //네이버
}
}
class 네이버_웹툰 extends 네이버 {
void method() {
super.method(); // 네이버
System.out.println("네이버_웹툰");
}
}
class 네이버_웹툰 extends 네이버 {
void method() {
super.super.method(); // 사람? NO 불가능
System.out.println("네이버_웹툰");
}
}
7.追加?!
Class 펭귄 {
void test() {
// TEST
}
public class Driver {
public static void main(String[] args) {
펭귄 뽀로로 =new 펭귄();
뽀로로.test();
}
}
펭귄 뽀로로1=new 펭귄();
펭귄 뽀로로2=new 펭귄();
펭귄 뽀로로3=new 펭귄();
...
펭귄 뽀로로100=new 펭귄();
REFERENCE
Reference
この問題について(Java拡張オブジェクト), 我々は、より多くの情報をここで見つけました https://velog.io/@sds1vrk/자바가-확장한-객체-지향テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol