类和对象的概念
**类:**有点像英语的泛指 / 非特指(a / 泛指名词),比如:人类、男人、女人、爸爸、妈妈、动物、猫、狗......
**对象:**有点像英语的特指(the / 具体个体),比如:你的爸爸、我的爸爸、你的女朋友、我的女朋友、你家的具体某个宠物猫、你家的具体某个宠物狗......
一般是new出来的,经常开玩笑的梗:被催婚或者问婚育情况的时候说那需要先new个对象......
**属性:**静态的,大概是名词、形容词、数量词
**方法:**动态的,大概是动词
类的定义
java
访问修饰符 Class 类名{
成员变量......
成员方法......
}
拿动物举例Animal、mammal、cat、dog
java
// 动物 抽象类
public abstract class Animal {
// 抽象方法:动物叫,没有方法体
public abstract void shout();
// 普通方法
public void eat() {
System.out.println("动物需要吃东西");
}
}
// 哺乳动物 继承 动物
public class Mammal extends Animal {
// 重写父类抽象方法
@Override
public void shout() {
System.out.println("哺乳动物发出叫声");
}
// 自有方法
public void breastFeed() {
System.out.println("哺乳动物:母乳喂养");
}
}
// 奔跑行为规范
public interface Run {
void run();
}
// 游泳行为规范
public interface Swim {
void swim();
}
// 宠物行为规范
public interface Pet {
void play();
}
// 1个直接父类 Mammal
// 多个接口用逗号分隔:implements Run, Pet
public class Cat extends Mammal implements Run, Pet {
// 必须重写 父类抽象方法
@Override
public void shout() {
System.out.println("猫:喵喵");
}
// 必须重写 Run 接口方法
@Override
public void run() {
System.out.println("猫咪会跑");
}
// 必须重写 Pet 接口方法
@Override
public void play() {
System.out.println("猫咪玩玩具");
}
}
// 狗 继承 哺乳动物
public class Dog extends Mammal implements Run, Swim, Pet {
@Override
public void shout() {
System.out.println("小狗:汪汪汪");
}
// 必须重写 Swim接口方法
@Override
public void swim() {
System.out.println("小狗会游泳");
}
// 必须重写 Run 接口方法
@Override
public void run() {
System.out.println("小狗会跑");
}
// 必须重写 Pet 接口方法
@Override
public void play() {
System.out.println("小狗玩玩具");
}
}
java
public class TestAnimal {
public static void main(String[] args) {
// 1. 子类对象
Cat cat = new Cat();
Dog dog = new Dog();
cat.eat(); // 继承自 Animal
cat.breastFeed(); // 继承自 Mammal
cat.shout(); // 自己重写
cat.run();
cat.play();
System.out.println("--------");
dog.eat();
dog.breastFeed();
dog.shout();
dog.run();
dog.swim();
dog.play();
// 2. 多态:父类引用指向子类对象
Animal a1 = new Cat();
Animal a2 = new Dog();
a1.shout();
a2.shout();
}
}
运行结果:
动物需要吃东西
哺乳动物:母乳喂养
猫:喵喵
猫咪会跑
猫咪玩玩具
动物需要吃东西
哺乳动物:母乳喂养
小狗:汪汪汪
小狗会跑
小狗会游泳
小狗玩玩具
-------- 多态 --------
猫:喵喵
小狗:汪汪汪
java 类继承的关键字 extends ,只能单继承,不过可以用 implements 实现多个接口
(python继承是直接把父类当参数传,支持多继承)
java 还有抽象类,抽象方法,用 abstract 装饰
(待续)