儿子的产生
先当儿子后当爹, 千古不变的真理啊. 爹帮儿子打下了大好河山, 儿子只要继承就是了.
关键字"继承" java中的子类可以继承父类的成员方法, 成员变量.
class Father {
public String name = "帅比";
public int age = 19;
public void eat() {
System.out.println("帅哥就得吃吃吃");
}
}
// 儿子继承
class Son extends Father {
}
public class Home {
public void print() {
// 实例化儿子
Son son = new Son();
System.out.println(son.age);
System.out.println(son.name);
son.eat();
}
public static void main(String[] args) {
Home home = new Home();
home.print();
}
}
注意看, 这里的儿子啥事没干, 和他爹一个姓,一个名, 还特么都是19岁, 还都会吃饭, 天才!爱因斯坦都得给他颁奖
eat() 这个父类方法就是子类继承的, 也可以调用.
从这一个例子我们可以得到, 子类可以继承父类的成员变量和成员方法.
但是实际上和现实中这样是错误的, 哪有爸爸和儿子都是一个名字, 年龄还都一样.
一般在实际生活中我们定义一个大类, 然后小类再从这个大类中吸取自己想要的变量, 方法, 并且给自己加点料, 添点味. 我们先让这两位父子退出历史舞台, 我们放眼于自然动物世界.
Animal & Dog & cat
Animal Dog Cat 这三个单词, 可以产生这样的联系, Dog和Cat可以归于Animal的旗下, 这与我们的继承不谋而合, 但是这次不一样, 如何描述一个动物. 第一步说出他的名字, 年龄几岁, 他的生活习性怎么样.
名字就是Animal这个类的成员变量, 年龄也是这个类的成员变量, 生活习性就是这个类的成员方法了. 我们来看代码
class Animal {
// 这是动物的两个成员变量
public String name;
public int age;
// 下面是动物的两个属性
public void eat() {
System.out.println(name + "正在吃饭");
}
public void sleep() {
System.out.println(name + "正在睡觉");
}
}
// 动物只是一个统称, 我们需要更加细节的东西, 比如说 小猫,小狗
// 新建小猫小狗, 因为小猫小狗都是属于动物 所以可以用动物的很多东西
// 比如说 name age 成员变量 还有 eat() sleep() 成员方法
class Dog extends Animal {
// 狗有不一样的习性, 狗会叫
public void bark() {
System.out.println(name + "汪汪汪");
}
public void eat() {
System.out.println(name + "狗在吃狗粮");
}
}
class Cat extends Animal {
// 猫也有不一样的习性, 猫会猫叫
public void miao() {
System.out.println(name + "喵喵喵");
}
public void eat() {
System.out.println(name + "猫在吃猫粮");
}
}
public class World {
public static void main(String[] args) {
// 调用父类的方法
Animal dog = new Dog();
dog.sleep();
// 注意
dog.eat();
Animal cat = new Cat();
cat.sleep();
cat.eat();
//
}
}
我们发现不同的类不同的eat方法所产生的状态都不一样, 这可以称作是多态, 多态是需要重写的, 多态只会发生在父类和子类之间, 那么重写也是这样, 我们发现, 重写一般会有@override这个表示符存在, 但是在这里却没有, 那么说明这个override只是一个批注, 以显式指定
注意重写也是有限制的, 被static修饰, private 修饰这些方法就不能被重写.
多态
多态我把它理解成一种强制转换, 将父类的类强制转换成子类, 可以用上子类的方法和成员变量.发生多态的条件:
1. 必须在继承体系下
2. 子类必须要对父类中方法进行重写
3. 通过父类的引用调用重写的方法