java的父类和子类的关系都有哪些?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java的父类和子类的关系都有哪些?相关的知识,希望对你有一定的参考价值。
首先你要明白一点:在面向对象语言中(java、c++、c#、smalltalk...)类是具有相同特征、属性(java中类的成员变量)和行为(java中类的方法)的事物的抽象数据库结构,一个类代表着这类事物所拥有的性质和行为。那么对你的问题中,既然是父类和子类,首先从文字意义上就知道他们存在着父子关系,这和现实中一样,父子必有共性,在java中用extends关键字来标识这种关系,extends是扩展的意思,从这里我们不难看出一点:子类拥有比父类共强大的功能,或者更多的属性。就是说子类对父类进行了扩展,并且父类能做的事子类也能做(非父类私有),除了父类私有的方法和属性,就像我们父亲的手是用来给父亲吃饭的而不是给我们吃饭的一样,在子类中我们可以引用父类的方法或者对付类的方法重新定义(重写),在父类被使用的场合可以使用子类(产生多态性),我们可以声明在某个地方使用某个类,而具体用的时候我们用其子类的实现来做(也就是吧子类的实例传进来),一般某个类的定义必有其功能和意义,而其子类有着跟多更强大的功能(如果子类和父类只能完成一样的功能那么这样的子类就失去了存在的意义,可以存在但没意义)。父类中被标识为public和protected的属性和方法可以再子类中直接引用,而私有的属性和方法只能通过其他公有方法去访问;继承使得类的体系结构变得庞大,功能也变得强大,但这也使得类的个数急剧增大,这时就需要使用接口,C++中类可以多重继承,而java中不允许,而是通过接口来实现同样的功能,正因为有这样的机制(继承和接口)面向对象语言中才会产生各种各样如花似锦的设计模式来使得我们的设计变得精妙...,面向对象的世界就像是一个活生生的人类世界慢慢体会吧,虽然我学java也有一段时间了但和很惭愧没什么成果,一起努力吧 参考技术A java的父类和子类的关系, 他们主要的关系肯定是继承。子类也可以重写父类的方法。继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。[1] Java继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。比如可以先定义一个类叫车,车有以下属性:车体大小,颜色,方向盘,轮胎,而又由车这个类派生出轿车和卡车两个类,为轿车添加一个小后备箱,而为卡车添加一个大货箱。 参考技术B 你问的是具体的父类和子类么,一般来说继承是其中一种。但是通常也会认为接口实现是实现“多继承”的方法。但是并不叫实现双方叫父类子类 参考技术C 子类可以继承父类的方法和属性;我也是刚学,知道的不多 参考技术D 继承,实现本回答被提问者采纳
Java 抽象类和接口(部分)
4.1 抽象类
编写一个类时,为该类定义一些方法,这些方法用于描述该类的行为方式,这些方法都有具体的方法体,但在某些情况下,某个父类仅知道其子类应该包含哪些方法,却无法准确她知道子类实现这些万法的细节。如定义一个图形类(Shape)作为诸如三角形、菱形以及矩形等图形的父类,在该父类中定义calcPerimeter)方法,该方法用于计算图形的周长,但不同的子类图形计算周长的方式大相径庭,所以导致 Shape 类的 calcPerimeter0)万法无法运用某个固定的计算图形周长的公式来计算其子类的周长。
在Java 中,可以将calcPerimeter()方法定义为抽象方法,抽象方法没有具体的方法实现,该方法必须由其继承的子类重写,这样该方法就起到了约束规范的作用,又不影响类最初的设计思路。
4.1.1 抽象方法和抽象类
抽象类是专门设计用来让子类继承,抽象方法心须被子类重写。
在 Java语高中,使用abstract 关健字修饰一个类时,该类就是她象类,使用abstract 关健字修饰一个方法时该方法即为抽象方法。
抽象类和抽象方法的规则如下 :
(1)一个抽象类中可以不定义抽象方法,但是只要类中有一个抽象方法,则该类一定是抽象类
(2)抽象类不能被实例化,即不能被 new 创建一个实例对象。
(3)如果一个子类继承一个抽象类,则子类需要通过覆盖的方式来重写该抽象类中的所有抽象方法,如果子类没有完全重写抽象父类中所有的抽象方法,则子类仍是抽象的。
(4)抽象方法可以与public、protected 夏合使用,但不能与 tinal、private 和 static 复合使用。
抽象类的作用
抽象类不能被实例化,只能作为父类被继承。从语义的角度而言,抽象类是从多个具体类中抽象出来的父类,从多个具有相同特征的类中抽象出一个抽象类,以该抽象类作为其子类的模板,从而避免了子类设计时的随意性。抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造但子类总体上会保留抽象类的行为方式。
编写一个抽象父类,父类提供多个子类的通用方法,并且将一个或多个方法留给其子类实现,这就是一种模板模式模板模式是一种常见的设计模式。
final 修饰符
final 关健字可以用于修饰类、变量和万法。final修饰变量时,表示该变量一旦获得了初始值就不可能被改变。 final修饰的类不能被继承,final修饰的方法可以被继承但不能被重写。
final 成员变量
对于final修饰的成员变量而言,一旦赋初始值就不能被重新赋值,如果既没有在定义成员变量时指定初始值,也没有在构造器中为成员变量指定初始值,那么这些成员变量的值将一直是系统分配的默认值,这些成员就失去了存在的意义。
final修饰的类属性、实例属性可以指定初始值的部分如下:
(1)类属性:必须在静态初始化块或声明该属性时指定初始值。
(2)实例属性:必须在声明该属性或构造器中指定初始值。
final局部变量
系统不会对局那变量进行初始化,局图变量必须由程序员显式初始化。因此,使用tnal修饰局部变量时,既可以在定义时指定默认值,也可以不指定默认值。
final 修饰的局部变量在定义时没有指定默认值,则应在后面的代码中对该tinal 变量斌初始值,但只能赋值一次,不能重复赋值。如果 final 修饰的局部变量在定义时已经指定默认值,则后面代码中不能对该变量赋值。
以上是关于java的父类和子类的关系都有哪些?的主要内容,如果未能解决你的问题,请参考以下文章