Java基础创作日记 Day04
时间:2021年2月5日下午 晴
趁兴把之前看的一些知识点再总结一下
继承的作用
- 实现多态
- 实现代码的多重利用
- 实现继承体系
实现继承
通过extends关键字
继承的特点
- Java中只支持单继承(一个类只能有一个直接的父类)
- 多个类可以同时继承一个父类(一个父类可以有多个子类)
- Java可多重继承(可以存在子类的父类也有父类)
- 子类可以获得父类的可继承的成员
- 子类被实例化的时候父类的构造方法也会被调用
重写父类方法
我们继承的子类一般会对继承来的一些成员进行修改
我们可以重写这些方法
重写:
需要保证和继承来的方法具有相同的方法名、参数列表、返回值类型
例:
问题:写一个动物类,再通过动物类来创建一个狗类和猫类
问题分析:猫和狗都是动物,都会叫,不过叫声不一样,可以在类中写一个shout()
方法,然后继承后进行重写,都有年龄属性Age
代码:
public class external_class {
public static void main(String[] args) {
Dog dog=new Dog();
dog.shout();
dog.print_Age();
Cat cat=new Cat();
cat.shout();
cat.print_Age();
}
}
class Animal{
private int Age=100;
public int getAge() {
return Age;
}
public void setAge(int age) {
this.Age = age;
}
public void shout(){
System.out.println("我是动物");
}
}
class Dog extends Animal{
public void shout(){
System.out.println("汪汪汪");
}
public void print_Age(){
System.out.println("这只狗"+getAge()+"岁了");
}
}
class Cat extends Animal{
public void shout(){
System.out.println("喵喵喵");
}
public void print_Age(){
System.out.println("这只猫"+getAge()+"岁了");
}
}
父类:Animal,有两个创建的成员,Age,创建时初始化为100。然后成员方法:shout()
在创建两个Animal的子类Dog和Cat
重写shout()
方法
然后,分别打印年龄
结果:
super关键字
因为在一般情况下,我们重写了父类的方法,那么后代就不能再访问父类的原方法了,所以为了可以再能访问父类的被重写的方法,我们引入关键字super,super还可指定实例化子类的时候调用父类的哪个构造方法
super作用
调用父类被重写成员的原体
在我们重写了父类的方法情况下还可以访问父类原成员
语法:super.成员名
(成员名可为变量名)
指定实例化子类时调用父类的哪个方法
因为我们知道,实例化子类的时候,父类的构造方法也会被调用,我们可以通过super关键字来调用不同的父类构造方法
语法:super()
或super(参数列表)
根据我们填入的不同的实参可以调用不同的父类构造方法。(前提父类得有那些构造方法)
同时需要注意,要想调用父类指定的构造方法需要把子类的构造方法也重写,同时把super()
或super(参数列表)
写在子类的构造方法第一行,并且只能出现一次
如果不指定的话会自动调用父类的无参构造方法
全部代码
public class external_class {
public static void main(String[] args) {
Dog dog=new Dog();
dog.shout();
dog.print_Age();
Cat cat=new Cat();
cat.shout();
cat.print_Age();
}
}
class Animal{
public Animal(){
System.out.println("Animal被创建了");
}
public Animal(String name){
System.out.println("名为"+name+"的Animal被创建了");
}
private int Age=100;
public int getAge() {
return Age;
}
public void setAge(int age) {
this.Age = age;
}
public void shout(){
System.out.println("我是动物");
}
}
class Dog extends Animal{
public Dog(){
super("Dog");
}
public void shout(){
System.out.println("汪汪汪");
}
public void print_Age(){
System.out.println("这只狗"+getAge()+"岁了");
System.out.println("接下来是animal的叫");
super.shout();
}
}
class Cat extends Animal{
public void shout(){
System.out.println("喵喵喵");
}
public void print_Age(){
System.out.println("这只猫"+getAge()+"岁了");
}
}