【Java入门】继承
类的继承
父母结合,生下了孩子,孩子继承了父亲的的基因,因为孩子的会和父母长得比较像,还表现出差不多的行为,这就是继承.
父类的所有成员(除去构造函数、私有成员)都会被继承
通过extends关键字继承 被继承的我们称为父类,继承的我们称为子类.
在Java中,并不支持多继承,只允许单继承,也就是子类始终只有一个直接的父类.
Class SonClass extends FatherClass
{
//即使什么都不写,此时子类也已经拥有了一些成员,这是从父类继承来的.
}
一.1重写方法
public class Father {
private int age;
private String name;
private boolean sex;
public void eatFood() {
System.out.println("eatFood");
}
public static void working() {
System.out.println("father working");
}
}
子类可以自己添加额外的成员
public class Son extends Father {
public static void working() {
System.out.println("son working");
}
}
子类可以重写或者是隐藏父类的成员
public class Son extends Father {
//重写父类的函数
@Override
public void eatFood() {
System.out.println("Son eatFood");
}
//覆盖父类的函数
public static void working() {
System.out.println("son working");
}
子类自己的函数
public void play() {
System.out.println("play");
}
}
隐藏成员针对的是父类的静态成员

实例化子类生成一个对象
将子类对象赋值给父类
调用eatFood方法,输出表明该方法被覆盖,即使赋值给父类变量也是输出子类重写的内容
调用working方法,输出表明该方法被隐藏,此时又显露出来

一.2Super
可以通过super关键字访问父类的成员
super.xxx 调用父类的成员xxx super() 调用父类的构造器
super.getName()
通过this关键字访问本对象成员
this.xx 调用本类在外部的实例的成员
this.getName();
xxx this() 调用自己的另一个构造器(注意必须放在子类构造器的第一句)
public Son(String name, int age, boolean sex) {
super(name, age, sex); 访问构造器必须放在第一句
super.setName(super.getName() + "son");
}
一.3Object所有类的父类 equals hashcode tostring
所有类都继承自object类,也就是说object是所有类的父类
Equals、hashcode、toString是object类的函数,当然,所有子类也会拥有这些函数
Equals 比较函数 默认为比较两个对象是否为同一个对象,子类可以重写此函数来改变比较的方式 比如String就可以通过equals方法比较是否为同一字符串
@Override
public boolean equals(Object obj) {
return hashCode() == obj.hashCode();
}
Hashcode 哈希码 通过一定算法计算哈希代码,在同类的对象中哈希码唯一 String就是根据字符串生成哈希码,再通过比较哈希码的比较结果判断是否为同一字符串
@Override
public int hashCode() {
return super.hashCode();
}
ToString 转换为字符串 可以重写 例如说整数的包装类转换为字符串就是对应的数字
@Override
public String toString() {
return getClass().toString() + LocalDateTime.now();
}
第二章多态
父类变量可以接受子类的引用
这样调用父类与子类同一个函数时,却表现出了不同的行为,这种现象称之为多态


//同一父类下的子类,调用相同的方法,却表现出了不同的行为。这就是类的多态。
//比如同样是打印机(继承自同一父类),有的打印机打印照片时,有的是黑白色的,有的是彩色。调用相同的函数却表现出了不同的行为,这就是多态


浙公网安备 33010602011771号