继承的概念
继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系
在java中,类的继承是指在一个新的类的基础上去构建一个新的类.
如果类B从类A中派生,或者说类B扩展自类A 或者说 类B继承于类A
称类A为"父类"也叫超类或基类
称类B为"子类"也叫次类,扩展类,派生类
继承关系的子类特点
子类会自动拥有父类所有的非私有的属性和方法,同时也可以添加新的属性和方法,但是不可以删除父类的方法
子类可以用自己的方式实现父类的方法
java的继承是单继承但可以多重继承,单继承就是一个子类只能继承一个子类,多重继承是 a继承b b继承c 按关系来说c是b的父类,也是a的父类,同时b也是a的父类
提高了类之间的耦合性(继承的缺点,加强了类之间的联系)
继承的定义格式和使用
继承的格式
class 子类名 entends 父类{}案例雇员(Employee)与研发部员工(Developer)
Employee.java:
/*
* 定义员工类Employee
*/
class Employee {
String name; // 定义name属性
public void work() {// 定义员工的工作方法
System.out.println("尽心尽力地工作");
}
}
Developer.java:
/*
* 定义研发部员工类Developer 继承 员工类Employee
* 继承了父类中所有非private修饰的成员变量
*/
class Developer extends Employee {
// 定义一个打印name的方法
public void printName() {
System.out.println("name=" + name);
}
}
测试员工类与研发部员工类:
/*
* 定义测试类
*/
public class Example01 {
public static void main(String[] args) {
Developer d = new Developer(); // 创建一个研发部员工类对象
d.name = "小明"; // 为该员工类的name属性进行赋值
d.printName(); // 调用该员工的printName()方法
d.work(); // 调用Developer类继承来的work()方法
}
} 通过子类对象既可以调用自身的非private修饰的成员,也可以调用父类的非private修饰的成员
继承的好处
1提高了代码的复用性,提高了软件的开发效率
2让类与类之间产生了关系,通过了多态的前提
继承的缺点
1打破了封装,基类向子类暴露了实现的细节,子类可以访问基类的属性和方法
2削弱了子类的独立性,当父类改变时,子类也不得不改变
继承层次
继承并不只限于一个层次.有一个公共超类派生出来的所有类被称为继承层次
继承链:从某个特定的类到器祖先的路径被称为该类的继承链,通常一个祖先可以拥有多个子孙继承链
继承的注意事项
1在java中类只支持单继承不允许多继承,也就是说下面是不合法的.
class A{}
class B{}
class C extends A,B{} // C类不可以同时继承A类和B类如果支持会发生声明呢
class A{
int a=3;
public void method(){
}
}
class B{
int a=5;
public void method(){
}
}
class C extends A,B{
}
class Demo{
public static void main(String[] args){
C c=new C();
System.out.println(c.a);//到底是调用A的还是B的成员变量??无法确定
c.method();//到底是调用A的还是B的成员方法??无法确定
}
}2多个类可以继承一个父类,下面的情况就是允许的
class A{}
class B extends A{}
class C extends A{} // 类B和类C都可以继承类A3多层继承是可以的即一个类的父类可以再去继承另外的父类,
class A{}
class B extends A{} // 类B继承类A,类B是类A的子类
class C extends B{} // 类C继承类B,类C是类B的子类,同时也是类A的子类4父类和子类是一种相对的概念 一个类是某个类父类的同时,也可以是另一个类的子类。
5继承是为"是一个"的关系建模的,父类和其子类间必须存在"是一个"的关系,否则不能用继承。
但也并不是所有"是一个"的关系都应该用继承。例如,正方形是一个矩形,但不能让 Square 类来继承 Rectangle 类,因为正方形不能从矩形扩展得到任何东西。正 确的继承关系是 Square 类继承 Shape 类
继承的体系
动物(吃)
|
-------------------------
| |
猫科动物(吃,胎生) 爬行动物(吃,卵生)
| |
------------------------------- -------------------------
| | | |
猫(吃,抓老鼠,胎生) 虎(吃,领地,胎生) 蛇(吃,冬眠,卵生) 鳄鱼(吃,潜水,卵生)
动物是对每个具体事物共性的抽取,子类的共性抽取为父类
父类:具有子类的共同特性
子类不仅有共同特性还有自身独有的内容
整个继承越往上越抽象,越往下越具体
继承后子类父类成员变量的特点
1子类调用成员变量是,子类自己有就用字的,没有就用父类的
2出现同名变量时,遵循就近查找原则,用子类自己的
原文:http://blog.51cto.com/10760006/2155964