继承简述
继承是Java中的一个重要概念,我们可以参照现实是生活中的继承来理解Java中的继承键系.在现实生活中,我们可以继承到我们父辈的遗产,我们的父辈则继承他们父辈也就是我们爷爷的遗产,而遗产我们总能继承一部分,如房子,车子,票子之类的,但也有一些我们无法继承,比如你父亲的身体,私房钱什么的(这年头男人谁没藏点私房钱).在承的过程中我们可以直接继承父辈的财产,但是无法直接继承我们爷爷的财产,但是可以间接的从父辈手中继承其财产,而在Java中也是这样,继承只可以单继承,及extends后面只可以写一个类,但是继承可以传递,A继承B,B继承C,这样A就可以间接的继承到C.就如儿子继承爸爸的遗产,爸爸继承爷爷的遗产,这样儿子虽没有直接继承到爷爷的遗产但是通过爸爸间接的继承到了爷爷的遗产.
Java中的继承
在java中继承通过一个关键字extends来完成,如果A类要继承B类,那么在A类的后面写上extends 和 B类的名字即可.
例如:Public class A extends B{
}
这样A类就会继承B类中的一些属性及方法(用public protected修饰的属性或方法,权限修饰符默认不写及private修饰的无法继承),而我们通常称A类为子类,B类为父类.
在Java中为单继承,多实现,继承只能继承一个类,实现在可以实现多个,但是继承效果可以传递,如
class A extends B{
}
class B extends C{
}
这样A类就可以继承B和C中的一些属性及方法.
Object类
object类是Java中一个十分重要的类,他为所有类的父类,所有的类都或直接,或间接的继承了object类,而object类没有父类.一个类如果写有extends关键字,则继承extends后面的这个类,否自默认继承object类.
Object类中的方法
1.hashCode()将内存地址计算得到一个int类型的整数;
2.toString()将对象打印成一个类全名加上一个十六进制地址的字符串;
3.equals()比较基本类型时比较值,比较引用类型时比较地址,同==号一致,可以重写来更改其比较的规则;
4.wait()将线程挂起,进入等待状态;
5.notify()将线程唤醒;
6.notifyAll()将线程全部唤醒;
7.finalize()当对象被GC回收时默认调用此方法,权限为protected;
8.clone()用于克隆对象,权限为protected;
9.getClass()获去对象对应的类映射;
方法重写
当父类的方法无法满足子类需求时,可以进行方法重写.方法重写时,方法的名字,参数列表与父类保持一致,方法体中的内容进行重写.
-
权限修饰符 子类可以大于等于父类
-
特征修饰符 final static abstract
父类时final的无法重写.
父类时static的不存在重写.
父类时abstract的必须重写. -
返回值类型 子类可以小于等于父类
-
名字 子类必须与父类一致
-
参数 子类必须与父类一致
-
异常
如果父类抛出运行时异常,子类可以不予理会.
如果父类抛出编译时异常,那么
子类抛出异常的个数少于等于父类,
子类抛出异常的类型小于等于父类. -
方法体 子类与父类不一致.
this和super关键字的使用
- this代表当前调用方法时的那个对象,super指代调用方法时父类的对象.
- this可以调用构造方法this()创建当前类的对象,super也可以调用构造方法创建当前类父类的对象.
- 他们都可以调用一般的属性和方法,this调用的是子类的,super调用的是父类的.
- 调用构造方法时需要把他们写在第一行,所以调用构造方法时this和super无法同时出现.
代码实例
//这是一个父类(动物类)Animal,他有两个属性和两个方法
public class Animal{
public String name;
public int age;
public void eat(){
System.out.println("这是动物的吃饭方法,随便吃点,能吃就行");
}
public void sleep(){
System.out.println("这是动物的睡觉方法");
}
}
//这是一个子类Person,其继承了Animal的属性和方法
public class Person extends Animal{
//动物的吃饭方法无法满足人类的需求,进行方法重写
public void eat(){
System.out.println("这是人类的吃饭方法,不仅味道要好吃,还有讲究搭配均衡,有营养");
}
//子类可以添加其独有的属性或方法
public void playGame(){
System.out.println("这是人类的玩游戏方法,来句农药放松下");
}
}
//测试类
public class Test{
public static void main(String[] ars){
Person p = new Person();
//从父类Animal中继承过来的属性
p.name="张三";
p.age=18;
//从父类继承过来的方法
p.sleep();
//重写的eat方法
p.eat();
p.playGame();
System.out.println(p.name+"的年龄为"+p.age+"岁");
}
}
输出结果
知识总结
- 子类继承父类通过一个关键字 extends;
- 子类的对象可以调用父类中public protected修饰的方法或属性;
- 子类可以添加自己独有的方法;
- 子类从父类继承过来的方法无法满足需求时可以重写其方法;
- 除object类外的所有类都有父类,如果写extends则继承后面所写的类,否则默认继承object;
- object是所有类的父类,每个类都或直接或间接继承了object类,并且object类没有父类;
- java中是单继承,也就是extends后面只能写一个类,但是继承可以传递;