标签:vat style 另一个 支持 employee 多继承 类的继承 体系 派生类
继承的概述继承的概念
继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系
在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都可以继承类A
3多层继承是可以的即一个类的父类可以再去继承另外的父类,
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出现同名变量时,遵循就近查找原则,用子类自己的
标签:vat style 另一个 支持 employee 多继承 类的继承 体系 派生类
原文地址:http://blog.51cto.com/10760006/2155964