자바의 세 가지 주요 특징은 무엇입니까?
Java의 세 가지 주요 특징은 다음과 같습니다. 1. 클래스 내부에 클래스의 특정 정보를 숨기고 외부 프로그램에서 직접 접근을 허용하지 않는 것을 의미하는 캡슐화 대신, 제공된 메소드를 통해 숨겨진 정보에 대한 작업 및 접근이 실현됩니다. 수업별로. 2. 상속이란 하위 클래스가 상위 클래스의 모든 속성과 메서드를 가지므로 코드 재사용이 가능하다는 것을 의미합니다. 3. 다형성은 상위 클래스 참조가 하위 클래스 객체를 가리키므로 여러 형태가 생성됨을 의미합니다.
이 튜토리얼의 운영 환경: windows7 시스템, java8 버전, DELL G3 컴퓨터.
Java의 세 가지 주요 기능
객체 지향의 세 가지 주요 기능: 캡슐화, 상속, 다형성.
캡슐화:
- 클래스 내부에 클래스의 일부 정보를 숨기고 외부 프로그램에서 직접 접근을 허용하지 않습니다. 대신 숨겨진 정보에 대한 작업 및 접근은 클래스에서 제공하는 메서드를 통해 구현됩니다.
상속:
- 하위 클래스는 상위 클래스의 모든 속성과 메서드를 소유하므로(소유할 수 없는 개인적으로 수정된 속성 제외) 구현 코드의 재사용을 실현합니다.
다형성:
- 사용 상위 클래스 참조 Accept, 다른 하위 클래스의 객체 인스턴스, 상위 클래스 참조는 동일한 메소드를 호출하고 하위 클래스의 다른 인스턴스에 따라 다른 결과를 생성합니다
1) 무엇 is Encapsulation
개념: 객체의 내부 구현 세부 사항을 최대한 숨기고, 객체의 수정 및 접근 권한을 제어합니다.
액세스 한정자: private(속성은 비공개로 수정 가능하며 이 클래스에만 표시됨)
2) 공용 액세스 방법
은 할당 및 값 획득 작업을 완료하기 위한 액세스 방법 형식입니다.
문제: 불법적인 데이터 입력이 아직도 해결되지 않고 있습니다!
- 정상적인 데이터 입력을 보장하기 위해 공개 액세스 방법을 제공하세요.
- 명명 규칙:
- Assignment: setXXX() //할당을 달성하려면 메소드 매개변수를 사용하세요
- Value: getXXX() //값을 달성하려면 메소드 반환 값을 사용하세요
3) 예
public static void main(String[] args) { int a; Num num = new Num(); // 传入值100 num.setNum(100); System.out.println(num.getNum()); }
private int a; // 在调用get方法时,返回本类a的值 public int getNum() { return a; } // 接受传入的值100,并赋值给本类的a public void setNum(int num) { this.a = num; }
4) 유효한 데이터 필터링
공개 접근 방식에 논리적 판단을 추가하여 불법 데이터를 필터링하여 데이터 보안을 보장합니다.
5) 요약
get/set 메소드는 외부 세계가 객체의 전용 속성에 액세스할 수 있는 유일한 채널이며, 메소드 내부에서 데이터를 감지하고 필터링할 수 있습니다.
1) 프로그램 내 상속
- 프로그램 내 상속은 클래스 간의 특성 및 행동을 선물하거나 획득하는 것입니다.
- 두 클래스 간의 상속 관계는 "is a" 관계를 충족해야 합니다.
2) 부모 클래스 선택
실생활에서는 여러 범주 간에 상속 관계가 있으며 모두 "is a" 관계를 만족합니다.
개는 동물이고, 개는 생명체이며, 개는 물질입니다.
"개"의 상위 카테고리로 여러 카테고리를 사용할 수 있으며, 그 중에서 가장 적합한 상위 카테고리를 선택해야 합니다.
기능이 정교할수록 겹치는 점이 많아지고 직계 상위 클래스에 가까워집니다.
함수가 거칠수록 겹치는 점이 적어지고 Object 클래스에 가까워집니다. (모든 것이 객체라는 개념)
3) 상속
구문: class subclass extends parent class { } //하위 클래스 정의 시 상위 클래스로부터 상속을 표시
public class 子类名 extends 父类名{ //代码块 }
Application : 상속 생성 관계 후에 하위 클래스는 상위 클래스의 속성과 메서드를 사용하거나 하위 클래스에 고유한 속성과 메서드를 정의할 수 있습니다.
이점: 코드의 재사용성을 향상시킬 뿐만 아니라 코드의 확장성도 향상시킵니다.
4) 상속의 특징
Java는 단일 상속입니다. 클래스는 하나의 직접 상위 클래스만 가질 수 있지만 다단계 상속이 가능하며 속성과 메서드를 단계별로 중첩할 수 있습니다.
5) 상속 불가능
생성자 메서드: 클래스의 생성자 메서드는 이 클래스의 개체를 생성하는 역할만 담당하며 상속될 수 없습니다.
Private 수정 속성 및 메서드: 이 클래스에만 표시되는 액세스 한정자 유형입니다.
부모 클래스와 자식 클래스가 동일한 패키지에 없으면 기본적으로 속성과 메서드가 수정됩니다. 즉, 동일한 패키지에서만 볼 수 있는 액세스 한정자 유형입니다.
1) 메소드 재작성/재정의
메소드 재작성 원리:
- 메소드 이름과 매개변수 목록은 상위 클래스와 동일합니다.
- 반환 값 유형은 상위 클래스 또는 하위 클래스와 동일해야 합니다.
- 액세스 한정자는 상위 클래스와 동일하거나 상위 클래스보다 넓을 수 있습니다.
메서드 재작성 실행:
하위 클래스가 상위 클래스 메소드를 재작성한 후 하위 클래스의 재작성된 메소드가 호출될 때 먼저 실행됩니다.
메서드 재정의의 특징:
하위 클래스가 상위 클래스 메서드를 재정의하면 하위 클래스 메서드가 상위 클래스 메서드를 재정의합니다.
하위 클래스가 상위 클래스 메서드를 재정의하는 경우 액세스 수준은 상위 클래스 메서드보다 엄격할 수 없습니다.
하위 클래스 재정의 메서드 이름과 유형은 상위 클래스와 동일합니다.
父类的构造方法无法重写,只能被覆盖。
示例:
//父类 public class Animal { // 父类中吃的方法会输出“玩玩玩” public void play() { System.out.println("玩玩玩"); } // 父类中睡的方法会输出“睡睡睡” public void sleep() { System.out.println("睡睡睡"); } }
/** * 狗类继承 父类 */ public class Dog extends Animal { // 进行方法重写,将方法重写输出为“狗玩飞碟” public void play() { System.out.println("狗玩飞碟"); } }
public class Test { public static void main(String[] args) { // 实例化宠物对象 Dog d = new Dog(); d.play(); d.sleep(); } }
运行输出:
2)方法重写与方法重载的区别
相同点:方法名相同
不同点:
重载:参数列表不同,返回值与访问修饰符无关
重写:参数列表相同,返回值相同或其子类,访问修饰符不能比父类更严
1)super关键字
super关键字可在子类中访问父类的方法。
- 使用”super.”的形式访问父类的方法,进而完成在子类中的复用;
- 再叠加额外的功能代码,组成新的功能。
2)super调用父类无参构造
super():表示调用父类无参构造方法。如果没有显示书写,隐式存在于子类构造方法的首行。
3)super调用父类有参构造
super():表示调用父类无参构造方法。
super(实参):表示调用父类有参构造方法。
参构造被执行
4)this与super
this或super使用在构造方法中时,都要求在首行。
当子类构造中使用了this()或this(实参),即不可再同时书写super()或super(实参),会由this()指向构造方法完成super()调用。
class A{ public A(){ System.out.println(( "A-无参构造")); } public A(int value) { System.out.println(("A-有参构造")); } } class B extends A{ public B(){ super(); System.out.println( "B-无参构造"); } public B(int value) { // super();这两货不能跟同时存在 this(); System.out.println(("B-有参构造")); } }
概念:父类引用指向子类对象,从而产生多种形态。
二者具有直接或间接的继承关系时,父类引用可指向子类对象,即形成多态。
父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。
1)多态的应用
方法重载可以解决接收不同对象参数的问题,但其缺点也比较明显。
- 首先,随着子类的增加,Master类需要继续提供大量的方法重载,多次修改并重新编译源文件。
- 其次,每一个feed方法与某一种具体类型形成了密不可分的关系,耦合太高。
场景一:使用父类作为方法形参实现多态,使方法参数的类型更为宽泛。
public class Animal { // 父类中吃的方法会输出“玩玩玩” public void play() { System.out.println("玩玩玩"); } // 父类中睡的方法会输出“睡睡睡” public void sleep() { System.out.println("睡睡睡"); } }
/** * 狗类继承 父类 * * * */ public class Dog extends Animal { // 狗类特有的方法“狗吃狗粮” public void eat() { System.out.println("狗吃狗粮"); } }
public class Test { public static void main(String[] args) { // 实例化宠物对象 Animal d = new Dog(); d.play(); d.sleep(); // The method eat() is undefined for the type Animal // 对于类型动物,eat()方法未定义 // 当我们去调用子类对象的特有方法时,就会爆出上面的错误提示 // 如果想要实现子类特有方法,就必须要强转 // d.eat(); ((Dog) d).eat(); } }
运行输出:
场景二:使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。
示例:
//动物类 父类 public class Animal { public void food() { System.out.println("..."); } }
//用extends关键字,继承父类属性 public class Dog extends Animal { public void food() { System.out.println("狗吃狗粮"); } public void runing() { System.out.println("一直跑跑跳跳"); } }
//用extends关键字,继承父类属性 public class Fish extends Animal { public void food() { System.out.println("大鱼吃小鱼,小鱼吃虾米"); } public void swimming() { System.out.println("小鱼儿,一直游"); } }
public class Master { // 传入你的动物,并去给它喂食 public void food(Animal animal) { System.out.println("喂食"); animal.food(); } }
import java.util.Scanner; public class Shopping { // 你没有动物,所以animal为空 Animal animal = null; // 判断你要购买的宠物,并返回宠物类(狗、鱼) public Animal shopping(int a) { if (a == 1) { animal = new Dog(); } else if (a == 2) { animal = new Fish(); } // this.animal=animal; return animal; } public void showMenu() { Scanner input = new Scanner(System.in); System.out.println("欢迎来到一只宠物宠物店"); System.out.println("请选择喜欢的宠物:"); System.out.println("1.狗 2.鱼 "); int a = input.nextInt(); Animal animal = shopping(a); Master mm = new Master(); mm.food(animal); // 用instanceof判断你买的是狗还是鱼。 // 狗就执行狗的属性和方法,鱼就执行鱼的属性和方法 if (animal instanceof Dog) { Dog d = (Dog) animal; d.runing(); } else if (animal instanceof Fish) { Fish f = (Fish) animal; f.swimming(); } } }
//测试类 public class text { public static void main(String[] args) { Shopping shop = new Shopping(); shop.showMenu(); } }
运行结果:
2)多态的静态和动态实现
动态绑定
:即为重写/覆盖,方法的重写
动态绑定也叫后期绑定,在运行时,虚拟机根据具体对象实例的类型进行绑定,或者说是只有对象在虚拟机中运行创建了之后,才能确定方法属于哪一个对象实例的
- 根据实际对象是什么,就去找相应对象方法去执行。
- 动态绑定是在运行时才会执行(例如重写的方法)。
静态绑定
:即为重载,方法的重载
一个方法的参数在编译阶段常被静态地绑定,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数
- 根据类型找相应的属性或者静态变量。
- 静态绑定是在编译时执行(如成员变量,静态方法)。
更多编程相关知识,请访问:编程教学!!
위 내용은 자바의 세 가지 주요 특징은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 난수 생성기 안내. 여기서는 예제를 통해 Java의 함수와 예제를 통해 두 가지 다른 생성기에 대해 설명합니다.

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4
