导入:
1.student和teacher—》继承自person
1.1 写student
package com.xujc;
public class Student {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
1.2 写 teacher
package com.xujc;
public class Teacher {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
1.3 student和teacher继承自person
2.继承的时候有些方法不同,且容易忘了写—》抽象方法—》抽象类
3.多个方法改成一个方法调用student和frog
4.狗吃饭 ,st和frog游泳,想同时用怎么办–》接口类
--------文章详情------------------
01 — 抽象类
抽象类是一种不能被实例化的类,它的主要目的是作为其他类的基类,定义共同的方法或属性。抽象类在面向对象编程中扮演着重要的角色,它们通常包含抽象方法,这些方法只有声明而没有具体的实现。这样做的目的是为了让子类继承抽象类,并提供这些方法的具体实现(强制性)。
抽象类的关键特点:
- 不能实例化:抽象类不能直接被实例化,也就是说,你不能使用
new
关键字来创建一个抽象类的实例。 - 必须被继承:由于抽象类中的抽象方法没有具体实现,因此抽象类必须被其他类继承。
- 包含抽象方法:抽象类可以包含抽象方法,这些方法只有方法签名而没有方法体。
- 可以有构造方法。
例子
设想我们正在开发一个图形编辑软件,其中包含多种形状(Shape),如圆形(Circle)、矩形(Rectangle)和三角形(Triangle)。这些形状都有一些共同的特性和行为,例如它们都可以被移动(move)、旋转(rotate)和绘制(draw)。
// 抽象类 Shape
public abstract class Shape {
public abstract void move();
public abstract void rotate();
public abstract void draw();
}
// 具体类 Circle 继承自 Shape
public class Circle extends Shape {
@Override
public void move() {
// 实现移动一个圆形的具体逻辑
}
@Override
public void rotate() {
// 实现旋转一个圆形的具体逻辑
}
@Override
public void draw() {
// 实现绘制一个圆形的具体逻辑
}
}
// 具体类 Rectangle 继承自 Shape
public class Rectangle extends Shape {
// ... 类似Circle的实现
}
// 具体类 Triangle 继承自 Shape
public class Triangle extends Shape {
// ... 类似Circle的实现
}
02 — 多态
多态是面向对象编程的一个重要特性,它允许一个类的引用变量指向另一个类的对象。在Java中,多态的实现主要依赖于继承、接口和方法重写。
例子
假设我们有一个动物类(Animal)和两个子类:猫(Cat)和狗(Dog)。
public class Animal {
public void makeSound() {
System.out.println("动物发出声音");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("喵喵喵");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("汪汪汪");
}
}
public class Main {
public static void main(String[] args) {
Animal myCat = new Cat();
Animal myDog = new Dog();
myCat.makeSound(); // 输出:喵喵喵
myDog.makeSound(); // 输出:汪汪汪
}
}
03 — 接口
接口是Java中一个核心的面向对象编程概念,它定义了一组方法的规范,用于规定某个类或多个类应具有的行为。
例子
假设我们创建一个青蛙类:
public class Frog {
public void swim() {
System.out.println("青蛙游泳了!");
}
}
如果我们想要设计一个方法,可以同时调用Student
类和Frog
类中的swim()
方法,则需要使用接口:
public interface Swimable {
public void swim();
}
public class Student extends Person implements Swimable {
public void swim() {
System.out.println("学生游泳了!");
}
}
public class Frog implements Swimable {
public void swim() {
System.out.println("青蛙游泳了!");
}
}
public class Test {
public static void getFromWater(Swimable s) {
s.swim();
System.out.println("拿到了东西");
}
public static void main(String[] args) {
getFromWater(new Student());
getFromWater(new Frog());
}
}
小结
- 定义接口:使用
interface
关键字定义接口。 - 使用接口:类使用
implements
关键字实现接口,并提供所有方法的具体实现。 - 接口特点:
- 不能实例化。
- 没有构造方法。
- 可以有多态性。
- 可以继承其他接口。