Java面向对象的核心语法
1. 类和对象
-
定义类
java复制
public class MyClass { // 成员变量 private int id; private String name; // 构造方法 public MyClass(int id, String name) { this.id = id; this.name = name; } // 成员方法 public void display() { System.out.println("ID: " + id + ", Name: " + name); } // Getter 和 Setter 方法 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
-
创建对象
java复制
MyClass obj = new MyClass(1, "Kimi"); obj.display(); // 输出:ID: 1, Name: Kimi
2. 继承
-
定义父类
java复制
public class Animal { protected String name; public Animal(String name) { this.name = name; } public void eat() { System.out.println(name + " is eating."); } }
-
定义子类
java复制
public class Dog extends Animal { public Dog(String name) { super(name); // 调用父类构造方法 } public void bark() { System.out.println(name + " is barking."); } }
-
使用继承
java复制
Dog dog = new Dog("Tommy"); dog.eat(); // 继承自父类的方法 dog.bark(); // 子类特有的方法
3. 多态
-
方法重写(Override)
java复制
public class Animal { public void makeSound() { System.out.println("Animal makes a sound."); } } public class Dog extends Animal { @Override public void makeSound() { System.out.println("Dog barks."); } } public class Cat extends Animal { @Override public void makeSound() { System.out.println("Cat meows."); } }
-
多态的使用
java复制
Animal myDog = new Dog(); myDog.makeSound(); // 输出:Dog barks. Animal myCat = new Cat(); myCat.makeSound(); // 输出:Cat meows.
4. 接口
-
定义接口
java复制
public interface Animal { void makeSound(); }
-
实现接口
java复制
public class Dog implements Animal { @Override public void makeSound() { System.out.println("Dog barks."); } } public class Cat implements Animal { @Override public void makeSound() { System.out.println("Cat meows."); } }
-
使用接口
java复制
Animal myDog = new Dog(); myDog.makeSound(); // 输出:Dog barks. Animal myCat = new Cat(); myCat.makeSound(); // 输出:Cat meows.
5. 抽象类
-
定义抽象类
java复制
public abstract class Animal { protected String name; public Animal(String name) { this.name = name; } public abstract void makeSound(); }
-
继承抽象类
java复制
public class Dog extends Animal { public Dog(String name) { super(name); } @Override public void makeSound() { System.out.println(name + " barks."); } }
-
使用抽象类
java复制
Animal myDog = new Dog("Tommy"); myDog.makeSound(); // 输出:Tommy barks.
Java泛型
泛型用于在编译时提供类型安全,避免类型转换的错误,同时增强代码的复用性。
1. 泛型类
-
定义泛型类
java复制
public class Box<T> { private T content; public void setContent(T content) { this.content = content; } public T getContent() { return content; } }
-
使用泛型类
java复制
Box<String> stringBox = new Box<>(); stringBox.setContent("Hello"); System.out.println(stringBox.getContent()); // 输出:Hello Box<Integer> intBox = new Box<>(); intBox.setContent(123); System.out.println(intBox.getContent()); // 输出:123
2. 泛型方法
-
定义泛型方法
java复制
public class Utility { public static <T> void printArray(T[] array) { for (T element : array) { System.out.print(element + " "); } System.out.println(); } }
-
使用泛型方法
java复制
String[] stringArray = {"Hello", "World"}; Utility.printArray(stringArray); // 输出:Hello World Integer[] intArray = {1, 2, 3}; Utility.printArray(intArray); // 输出:1 2 3
3. 泛型接口
-
定义泛型接口
java复制
public interface Box<T> { void setContent(T content); T getContent(); }
-
实现泛型接口
java复制
public class StringBox implements Box<String> { private String content; @Override public void setContent(String content) { this.content = content; } @Override public String getContent() { return content; } }
-
使用泛型接口
java复制
Box<String> stringBox = new StringBox(); stringBox.setContent("Hello"); System.out.println(stringBox.getContent()); // 输出:Hello
4. 泛型的类型限制
-
定义有界泛型
java复制
public class Box<T extends Number> { private T content; public void setContent(T content) { this.content = content; } public T getContent() { return content; } }
-
使用有界泛型
java复制
Box<Integer> intBox = new Box<>(); intBox.setContent(123); System.out.println(intBox.getContent()); // 输出:123 // Box<String> stringBox = new Box<>(); // 错误,String 不是 Number 的子类
5. 泛型的通配符
-
无界通配符(
?
)java复制
public static void printBox(Box<?> box) { System.out.println(box.getContent()); }
-
有界通配符(
? extends T
)java复制
public static void printBox(Box<? extends Number> box) { System.out.println(box.getContent()); }
-
使用通配符
java复制
Box<Integer> intBox = new Box<>(); intBox.setContent(123); printBox(intBox); // 输出:123 // Box<String> stringBox = new Box<>(); // printBox(stringBox); // 错误,String 不是 Number 的子类
总结
-
面向对象:通过类和对象、继承、多态、接口和抽象类等特性,实现代码的模块化和复用性。
-
泛型:通过类型参数化,增强代码的类型安全性和复用性,避免类型转换错误。