java 继承讲解
定义 :继承遗产 继承父母的基因…程序也是源于生活的,程序的继承也是现实概念中的抽象。
举例:一个教java的老师 、教htm老师。,老师是不是很抽象有很多种老师,英语语文数学。。。
但是子类直接就具体的说明了是那种老师,java 的还是html。
兔子和羊属于食草动物类,狮子和豹属于食肉动物类。
食草动物和食肉动物又是属于动物类。
所以继承需要符合的关系是:is-a,父类更通用,子类更具体。
虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。
继承定义 :什么时候使用继承???
描述事物的时候有几个类有重复的属性和方法我们可以采用继承的方法来设计。
细节:
1.如果父类中包含了某些类中的共同的属性和行为,我们可以使用继承来设计程序。
2.子类使用extends关键字来继承父类共同属性以外,子类还需要有自己的特有的属性和方法。
3.父类更通用(抽象的),子类更具体
4.程序的问题 : 子类只能获得类中非private属性,如果想要继承就得提供公共的set/get方法。方法也是只能是公有的,私有的方法无法继承下来。
5.在java中只能做单根继承 :eg A extends B,C (X),多继承是不支持的。
A extends B{
}
6.在java 中支持多级继承
A extends B{
}
C extends B{
}
继承的优势 :
提高代码的复用性,更简洁。
关于继承的内存结构 :(代码如下)
//子类
package com.ss.cn;
/*
* 面向对象 --继承
* 要创建俩个老师的类 java php老师
* 老师有什么属性 :name age
* 老师的行为 :teach sleep 休息
*
*/
public class JavaTeacher extends Teacher {
//利用封装的方式
/*private String name;
private int age;*/
//方法 :
public void teach() {
/*
* 就是说的当前那么不是子类中的name,不是本类的东西那是绝对访问不了
* name现在在父类中,private String name 私有的受保护的,就是说其他类要是访问不了的,即使他有继承的关系
*
*/
System.out.println(getName()+"在教课");
}
//为什么要setget 方法
/*
* 利用封装时要想取得到值 也必须需要生成set/get方法
* 生成set/get方法快捷键 : shift+alt+s
*/
}
//子类 :
package com.ss.cn;
/*
* 面向对象 --继承
* 要创建俩个老师的类 java php老师
* 老师有什么属性 :name age
* 老师的行为 :teach sleep 休息
* 创建老师的父类
* 继承的语法 :关键字 extends
* class 子类 extends 父类{
* 子类的属性;
* 子类的方法;
* }
* 特点 : 子类会把福父类的所有属性和方法继承下来(出来final)
*/
public class HtmlTeacher extends Teacher{
public void teach() {
System.out.println(getName()+"在教html课");
}
}
package com.ss.cn;
//父类
public class Teacher {
//公共类
private String name;
private int age;
public void sleep() {
System.out.println(name+"在睡觉");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
//测试类
package com.ss.cn;
public class ExtendsDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1.对象中的属性就必须创建对象
JavaTeacher jTeacher=new JavaTeacher();
jTeacher.setName("Mrs");
jTeacher.setAge(25);
jTeacher.teach();
//同理 :
HtmlTeacher hTeacher=new HtmlTeacher();
hTeacher.setName("ssy");
hTeacher.setAge(23);
hTeacher.sleep();
hTeacher.teach();
}
}