「java中继承详解」java中继承和实现
本篇文章给大家谈谈java中继承详解,以及java中继承和实现对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
java中的继承是什么
Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。[1]
Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以分隔符先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。
类和类之间的继承关系可以用UML符号表示,其中父类又叫超类或基类,子类又叫派生类。父类是子类的一般化,子类是父类的特化(具体化)。
JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类,易于管理程序,同时一个类可以实现多个接口,从而克服单继承的缺点。
在面向对象程序设计中运用继承原则,就是在每个由一般类和特殊类形成的一般——特殊结构中,把一般类的对象实例和所有特殊类的对象实例都共同具有的属性和操作一次性地在一般类中进行显式的定义,在特殊类中不再重复地定义一般类中已经定义的东西,但是在语义上,特殊类却自动地、隐含地拥有它的一般类(以及所有更上层的一般类)中定义的属性和操作。特殊类的对象拥有其一般类的全部或部分属性与方法,称作特殊类对一般类的继承。
继承所表达的就是一种对象类之间的相交关系,它使得某类对象可以继承另外一类对象的数据成员和成员方法。若类B继承类A,则属于B的对象便具有类A的全部或部分性质(数据属性)和功能(操作),我们称被继承的类A为基类、父类或超类,而称继承类B为A的派生类或子类。
继承避免了对一般类和特殊类之间共同特征进行的重复描述。同时,通过继承可以清晰地表达每一项共同特征所适应的概念范围——在一般类中定义的属性和操作适应于这个类本身以及它以下的每一层特殊类的全部对象。运用继承原则使得系统模型比较简练也比较清晰。
在java中,什么叫继承?为什么要有继承?
java是面向对象的编程语言,是类构成了java语言,而继承又是java必不可少的,继承就是当你写一个类时,虽然这个类满足了某些功能但是你又想拓展它的功能,此时你就可以使用继承机制在写一个该类的子类,来完成你需要的功能,一旦子类继承了父类就拥有了父类的方法与域(除私有方法和私有域),在子类中也可以重写父类的方法,覆盖父类中同名的方法,定义与父类相同的域,隐藏父类同名的域,实现子类需要的功能。继承的优点是提高了代码的效率,避免了代码重写。
谈谈Java中的继承与组合
继承和组合的概念
在新类里简单地创建原有类的对象 我们把这种方法叫作 组合 因为新类由现有类的对象合并而成 我们只是简单地重复利用代码的功能 而不是采用它的形式
第二种方法是创建一个新类 将其作为现有类的一个 类型 我们可以原样采取现有类的形式 并在其中加入新代码 同时不会对现有的类产生影响 这种魔术般的行为叫作 继承 (Inheritance) 涉及的大多数工作都是由编译器完成的 对于面向对象的程序设计 继承 是最重要的基础概念之一 对于组合和继承这两种方法 大多数语法和行为都是类似的(因为它们都要根据现有的类型生成新类型)
组合也就是一个类的对象是另外一个类的成员 一般的程序都有组合的意味 只不过是基本数据类型是成员变量 下面请看具体的例子
class Head
{
Head(){
System out println( head );
}
}
class Body
{
Body(){
System out println( body );
}
}
class Person()
{
Head h=null;
Body b=null;
Person() //人是由头和身体组成的 Head和Body的对象是Person的一部分
{
h=new Head();
b =new Body();
}
}
继承作为面向对象的三个重要特性的一个方面 在面向对象的领域有着及其重要的作用 好像没听说哪个面向对象的语言不支持继承
class Person
{
private String name=null;
private int age= ;
public Person(String n int a)
{
name=n;
age=a;
}
int getAge()
{
return age;
}
String getName()
{
return name;
}
void getDescription()
{
System out println( name: +name+ \t + age: +age);
}
}
class Student extends Person
{
private String studno=null;
public Student(String n String no int a)
{
super(n a);
studno=no;
}
}
说明:Student类中有三个成员变量name age studno和一个方法getDescription();
注意:子类继承了父类的所有变量和函数 只是子类不能访问父类的private类型的变量和函数 其实privae类型的变量还是继承到子类中的
无论还是继承 都允许我们将子对象置于自己的新类中 大家或许会奇怪两者间的差异 以及到底该如何选择
如果想利用新类内部一个现有类的特性 而不想使用它的接口 通常应选择组合 也就是说 我们可嵌入一个对象 使自己能用它实现新类的特性 但新类的用户会看到我们已定义的接口 而不是来自嵌入对象的接口 考虑到这种效果 我们需在新类里嵌入现有类的private对象
有些时候 我们想让类用户直接访问新类的组合 也就是说 需要将成员对象的属性变为public 成员对象会将自身隐藏起来 所以这是一种安全的做法 而且在用户知道我们准备合成一系列组件时 接口就更容易理解 car(汽车)对象便是一个很好的例子
class Engine {
public void start() {}
public void rev() {}
public void stop() {}
}
class Wheel {
public void inflate(int psi) {}
}
class Window {
public void rollup() {}
public void rolldown() {}
}
class Door {
public Window window = new Window();
public void open() {}
public void close() {}
}
public class Car {
public Engine engine = new Engine();
public Wheel[] wheel = new Wheel[ ];
public Door left = new Door()
right = new Door(); // door
Car() {
for(int i = ; i ; i++)
wheel[i] = new Wheel();
}
public static void main(String[] args) {
Car car = new Car();
car left window rollup();
car wheel[ ] inflate( );
}
} ///:~
由于汽车的装配是故障分析时需要考虑的一项因素(并非只是基础设计简单的一部分) 所以有助于客户程序员理解如何使用类 而且类创建者的编程复杂程度也会大幅度降低
如选择继承 就需要取得一个现成的类 并制作它的一个特殊版本 通常 这意味着我们准备使用一个常规用途的类 并根据特定的需求对其进行定制 只需稍加想象 就知道自己不能用一个车辆对象来组合一辆汽车——汽车并不 包含 车辆 相反 它 属于 车辆的一种类别 属于 关系是用继承来表达的 而 包含 关系是用组合来表达的
protected
现在我们已理解了继承的概念 protected这个关键字最后终于有了意义 在理想情况下 private成员随时都是 私有 的 任何人不得访问 但在实际应用中 经常想把某些东西深深地藏起来 但同时允许访问衍生类的成员 protected关键字可帮助我们做到这一点 它的意思是 它本身是私有的 但可由从这个类继承的任何东西或者同一个包内的其他任何东西访问 也就是说 Java中的protected会成为进入 友好 状态
我们采取的最好的做法是保持成员的private状态——无论如何都应保留对基 础的实施细节进行修改的权利 在这一前提下 可通过protected方法允许类的继承者进行受到控制的访问
import java util *;
class Villain {
private int i;
protected int read() { return i; }
protected void set(int ii) { i = ii; }
public Villain(int ii) { i = ii; }
public int value(int m) { return m*i; }
}
public class Orc extends Villain {
private int j;
public Orc(int jj) { super(jj); j = jj; }
public void change(int x) { set(x); }
} ///:~
可以看到 change()拥有对set()的访问权限 因为它的属性是protected(受到保护的)
再论合成与继承
lishixinzhi/Article/program/Java/hx/201311/26635
java中继承详解的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java中继承和实现、java中继承详解的信息别忘了在本站进行查找喔。