# 簡單類的寫法及繼承、接口等用法實例
## 目錄
1. [面向對象編程基礎概念](#一面向對象編程基礎概念)
2. [簡單類的定義與使用](#二簡單類的定義與使用)
3. [類的繼承與多態](#三類的繼承與多態)
4. [接口的定義與實現](#四接口的定義與實現)
5. [抽象類與接口的對比](#五抽象類與接口的對比)
6. [綜合應用實例](#六綜合應用實例)
7. [總結](#七總結)
---
## 一、面向對象編程基礎概念
面向對象編程(OOP)是現代編程語言中最主流的編程范式之一,其核心思想是將現實世界的事物抽象為程序中的"對象"。主要包含三大特性:
- **封裝**:將數據和行為包裝在類中
- **繼承**:建立類之間的層次關系
- **多態**:同一操作作用于不同對象產生不同行為
Java作為典型的面向對象語言,完全支持這些特性。下面我們通過具體代碼示例來演示這些概念的實際應用。
---
## 二、簡單類的定義與使用
### 1. 基本類結構
```java
// 學生類示例
public class Student {
// 字段(屬性)
private String name;
private int age;
// 構造方法
public Student(String name, int age) {
this.name = name;
this.age = age;
}
// 方法
public void study() {
System.out.println(name + "正在學習...");
}
// Getter/Setter
public String getName() {
return name;
}
public void setAge(int age) {
if(age > 0) {
this.age = age;
}
}
}
public class Main {
public static void main(String[] args) {
// 創建對象
Student stu1 = new Student("張三", 18);
// 調用方法
stu1.study(); // 輸出:張三正在學習...
// 訪問屬性(通過方法)
System.out.println(stu1.getName());
}
}
// 父類
class Person {
protected String name;
public Person(String name) {
this.name = name;
}
public void introduce() {
System.out.println("我是" + name);
}
}
// 子類繼承
class Teacher extends Person {
private String subject;
public Teacher(String name, String subject) {
super(name); // 調用父類構造
this.subject = subject;
}
// 方法重寫
@Override
public void introduce() {
System.out.println("我是" + name + ",教授" + subject);
}
}
public class Test {
public static void main(String[] args) {
Person p1 = new Person("普通人");
Person p2 = new Teacher("王老師", "數學");
p1.introduce(); // 輸出:我是普通人
p2.introduce(); // 輸出:我是王老師,教授數學
}
}
super
關鍵字訪問父類成員// 可飛行的接口
interface Flyable {
// 常量(默認public static final)
int MAX_HEIGHT = 10000;
// 抽象方法(默認public abstract)
void fly();
// Java8+默認方法
default void land() {
System.out.println("正在降落...");
}
// Java8+靜態方法
static void showMaxHeight() {
System.out.println("最大飛行高度:" + MAX_HEIGHT);
}
}
class Bird implements Flyable {
@Override
public void fly() {
System.out.println("鳥兒展翅飛翔");
}
}
class Airplane implements Flyable {
@Override
public void fly() {
System.out.println("飛機引擎推進飛行");
}
@Override
public void land() {
System.out.println("飛機正在滑行降落");
}
}
public class InterfaceTest {
public static void main(String[] args) {
Flyable[] flyables = {new Bird(), new Airplane()};
for(Flyable f : flyables) {
f.fly();
f.land();
}
Flyable.showMaxHeight();
}
}
特性 | 抽象類 | 接口 |
---|---|---|
定義關鍵字 | abstract class | interface |
方法實現 | 可以有具體方法 | Java8前只能有抽象方法 |
字段 | 可以有普通字段 | 只能是常量 |
構造方法 | 有 | 無 |
多繼承 | 不支持 | 支持多實現 |
設計目的 | 代碼復用 | 定義行為規范 |
典型使用場景 | 同類事物的抽象 | 跨繼承體系的能力定義 |
// 抽象類示例
abstract class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
// 抽象方法
public abstract void makeSound();
// 具體方法
public void eat() {
System.out.println(name + "正在進食");
}
}
// 接口示例
interface Swimmable {
void swim();
}
// 接口定義
interface Shape {
double area();
double perimeter();
}
// 抽象類
abstract class AbstractShape implements Shape {
protected String color;
public AbstractShape(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
// 具體類實現
class Circle extends AbstractShape {
private double radius;
public Circle(String color, double radius) {
super(color);
this.radius = radius;
}
@Override
public double area() {
return Math.PI * radius * radius;
}
@Override
public double perimeter() {
return 2 * Math.PI * radius;
}
}
class Rectangle extends AbstractShape {
private double width;
private double height;
public Rectangle(String color, double width, double height) {
super(color);
this.width = width;
this.height = height;
}
@Override
public double area() {
return width * height;
}
@Override
public double perimeter() {
return 2 * (width + height);
}
}
public class ShapeTest {
public static void main(String[] args) {
Shape[] shapes = {
new Circle("紅色", 5.0),
new Rectangle("藍色", 4.0, 6.0)
};
for(Shape shape : shapes) {
System.out.println("顏色:" + ((AbstractShape)shape).getColor());
System.out.println("面積:" + shape.area());
System.out.println("周長:" + shape.perimeter());
System.out.println("-------------------");
}
}
}
掌握這些面向對象的核心概念,能夠幫助開發者設計出更加優雅、可維護的代碼結構。在實際開發中,應根據具體需求選擇最合適的抽象層次,避免過度設計。
最佳實踐建議: - 優先使用組合而非繼承 - 面向接口編程 - 遵循單一職責原則 - 保持類的內聚性 “`
這篇文章共計約3900字,采用Markdown格式編寫,包含了: 1. 完整的目錄結構 2. 理論解釋與代碼示例結合 3. 表格對比抽象類與接口 4. 綜合應用案例 5. 總結與最佳實踐建議
所有代碼示例都采用Java語言實現,可以直接復制運行測試。如需調整內容或補充其他語言的示例,可以進一步修改完善。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。