java继承要注意什么(java 中的继承的 优点和缺点 主要是缺点)
大家好,java继承要注意什么相信很多的网友都不是很明白,包括java 中的继承的 优点和缺点 主要是缺点也是一样,不过没有关系,接下来就来为大家分享关于java继承要注意什么和java 中的继承的 优点和缺点 主要是缺点的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!
Java中继承的意思以及用法
继承的意思就是如果Class A extends Class B或者Class A implents Interface B,那么A类就默认从B类那儿继承了公开的方法和成员变量。你要单独理解继承,恐怕不是那么的清晰,需要结合实际的项目,与封装和多态一起,才能有豁然开朗的感觉。继承最直接的意义就是代码的复用和便于扩展。
我这里就举个小例子,抛砖引玉:比如说我们现在有一个项目(为了说明继承,我们就假定整个项目就只是一个类),就是跟踪一个人一天的活动,事先我们肯定是先研究其业务逻辑和流程,将一个人一天的活动分为不同的对象和几个单独的流程环节。随着业务逻辑的不断精熟,我们发现,人一天的活动不过就是这么几步(这里只是打个比方哈,为了描述简单):起床-》吃早饭-》上班-》吃午饭-》上班-》下班-》吃晚饭-》上床睡觉。虽然总是这么几步,但是每个人一天的活动具体肯定是不一样,所以上面每一个环节都需要开发人员自己去实现,也许你负责的是老师的一天,而我负责的是学生的一天。
这时,要是没有继承的话,也就是说所有人的一天的活动都会是一个单独的全新的类,每一个开发人员都必须先了解人一天的活动有哪些环节才能进行开发(也就是说每一个开发人员都必须非常精熟业务逻辑,其意思就是,如果你是开发金融软件的,那么每个开发人员都必须对项目涉及的金融知识非常了解,但是实际上这样开发效率是很低的,因为不需要所有人都是架构师和项目经理,不是所有开发人员都要参与设计的)。这不仅加大了开发的难度降低了效率,更可怕的是,由于每个人开发人员思维不一样,理解不一样,不同的人一天的活动流程就可能变得千奇百怪,不同种类的人越多,项目就变得越不可控了。另外,每开发一种新的种类,开发人员都极可能把相同的代码再写一遍或者复制粘贴一遍,这也是没得必要的。
而如果有继承的话,我们就可以把一个人一天的活动给抽象成一个特殊的类,比如说接口interface,把那些必须实现的方法即活动环节写成方法,让每个开发人员去实现,这样,每个开发人员就无需去了解背后的业务逻辑和流程,即使你是一个刚到公司的新人,只需去实现这些方法,简单的了解一下业务,然后按部就班地开发就好了。另外,比如你负责的是老师的一天的生活,而大学老师和中学老师一天的生活是不一样的,但是又不是完全不一样,这时,你就可以把老师生活中相同的部分写进一个类作为父类,然后再分别写两个子类去继承该父类,并在两个子类中分别实现不同的部分,下次当你遇到需要开发小学老师的一天,补习老师的一天等等老师的一天的时候,相同部分的代码你都不用再写,只需继承那个父类,再在子类中实现不同的部分就好了,这样代码复用节约了开发时间,而且扩展起来也方便并且逻辑清晰。
为了给你解释继承的意思和用法,这里举的例子显得生硬,就项目设计来说也过于简单,不过希望你能明白我想传达的意思。
java继承的作用
(1)继承关系是传递的。若类C继承类B,类B继承类A,则类C既有从类B那里继承下来的属性与方法,也有从类A那里继承下来的属性与方法,还可以有自己新定义的属性和方法。继承来的属性和方法尽管是隐式的,但仍是类C的属性和方法。继承是在一些比较一般的类的基础上构造、建立和扩充新类的最有效的手段。
(2)继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系。
(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时只需要再描述与基类(类A)不同的少量特征(数据成员和成员方法)即可。这种做法能减小代码和数据的冗余度,大大增加程序的重用性。
(4)继承通过增强一致性来减少模块间的接口和界面,大大增加了程序的易维护性。
(5)提供多重继承机制。从理论上说,一个类可以是多个一般类的特殊类,它可以从多个一般类中继承属性与方法,这便是多重继承。Java出于安全性和可靠性的考虑,仅支持单重继承,而通过使用接口机制来实现多重继承。
java 中的继承的 优点和缺点 主要是缺点
java中的继承的优点和缺点如下:
优点:1.可以使用父类的所有非私有方法;而且单继承可由接口来弥补。
2.可以继承父类中定义的成员方法以及成员变量,使得子类可以减少代码的书写。还可以重写父类的方法以增加子类的功能。
缺点:1.耦合性太大
2.就是破坏了类的封装性,其实继承一般多用于抽象方法的继承和接口的实现
java中为什么要使用继承
继承: 1,提高了代码的复用性。 2,类与类之间产生了关系,关系的出现,就是多态的由来。
java只支持单继承,不支持不多继承。原因:当出现多个类中有相同方法时,子类不确定调用的是哪一个。其实就是父类中的方法有方法体。但是java支持多层继承。在多层继承中,父类定义都是共性成员。所体现的内容: 1,父类是不断向上抽取而来的。 2,既然父类体现的共性内容,那么在使用一个继承体系时,只需要查阅最顶层父类即可了解该体系的基本功能。(查阅API技巧之一) 3,只要建立最子类的对象即可对该继承体系进行应用。
子父类的出现,子类因为持有一个父类引用super,可以获取到父类中非私有的成员。如同子类中也有一个份一样。
覆盖(复写)override.对于成员函数,当子父类中出现了一模一样的函数时,会出现一个覆盖操作。在运行时,会运行子类中的方法。覆盖注意: 1,子类覆盖父类方法,必须权限大于等于父类。 2,静态覆盖静态。 3,覆盖只发生在函数上。
什么时候使用覆盖呢?可以通过覆盖的形式对父类的功能进行重新定义。比如:对功能进行修改或者对功能进行升级。注意:不要在子类中定义新功能。还要以父类中的声明为主。
class Demo{
void show(){
System.out.println("Demo show");
}
}
main()
{//Demo d= new Demo();
SubDemo d= new SubDemo();
d.show();
}
二年后。为了提高可维护性。建立一个子类继承Demo,复写其中的某些需要修改的功能即可。
class SubDemo extends Demo{
void show(){
System.out.println("subdemo show");
}
}
super关键字:代表的父类应用。super的应用和this的使用完全一样。
子类的实例化过程:子类中所有的构造函数回去访问父类中的空参数构造函数。那是因为:每一个子类构造函数中的第一行都有一个句隐式super()语句。原理:子类继承父类,获取获取到了父类中的成员,所以子类必须要先明确父类是如何对这些成员进行初始化的。
如何父类中没有了空参数构造函数,需要在子类的构造函数通过super,或者this语句指定要访问的构造函数。
什么时候使用继承呢?当类与类之间出现所属(is a)关系时,就使用继承。类中的所有成员是否可以被另一个类所以拥有.如果是继承.如果不是,看是否具备向上抽取的可能. class A{
void method(){}
void function(){}
}
有了一个B类,B中也需要一个method()方法。这时,是否可以用B继承A来获取这个方法呢?因为这样不是可以提高复用性吗?
那么判断,B和A之间有所属关系吗?不会判断。这时,可以通过另一个方式,B是否应用具备A中所有功能?不是。B只需一个method()方法即可。不需要function()。这样就不需要继承。但是B中就会重复定义method()方法。那么A和B出现了共性的内容,就具备了向上抽取的内容。这时A和B就又出现一个父类C。
class B{
void method(){}
void show(){}
}
所以最终设计: class C{
void method(){}
}
class A extends C{
void function(){}
}
class B extends C{
void show(){}
}
----------------------------------------------
final关键字 1,final可以修饰类,方法,变量。 2,final修饰类不可以被继承,但是可以继承其他类。 3,final修饰的方法不可以被覆盖,但可以覆盖父类方法。 4,final修饰的变量包括成员变量,类变量,局部变量,这些变量只能赋值一次。 5,内部类在局部时,只可以访问被final修饰的局部变量。通常规范中,被final修饰的变量是一个常量,常量名称所有字母大写。
-----------------------------------------------
抽象类:分析事物时,发现了共性内容,就出现向上抽取。会有这样一种特殊情况,就是功能声明相同,但功能主体不同。那么这时也可以抽取,但只抽取方法声明,不抽取方法主体。那么该方法就是一个抽象方法。抽象方法的表现形式:abstract返回值类型函数名称(参数列表);抽象方法一定要存放在抽象类中。
特点:抽象类不能用new进行实例化。想要创建对象,必须通过子类复写父类中所有的抽象方法后,该子类才可以创建对象。
抽象类定义时,和一般类一样,都是在描述事物,只不过抽象类可以存放抽象方法,不可以建立对象。
抽象方法的出现可以强迫子类去做某些事。
例:学员类的例子。学员类的出现其实分析了现实生活中的学生而来的。张三:躺着睡觉,学习(总结式)李四:躺着睡觉,学习(机械式)
abstract class学员{
void睡觉(){
躺着睡觉;
}
abstract void学习();
}
--------------------------------------------接口:简单的理解成抽象类的特殊表现形式,当抽象类的方法全都是抽象的,那么这时就用接口来表示。
特点:--接口是对外暴露的规则。--接口是功能的扩展。--接口的出现降低了耦合性。--在java中,多继承的机制被java通过另一种形式来体现,就是多现实。--在java中,一类可以继承一个类的同时,实现多个接口。例子:主板的pci接口。插座。笔记本电脑的usb接口。
interface抽烟{
抽烟方法;
}
class张三 extends学员 implements抽烟{
void睡觉(){
躺着睡觉;
}
void学习(){}
抽烟方法{}
}
接口中通常的定义的内容: 1,全局常量。public static final 2,公有的抽象方法。 public abstract
类与类之间是继承关系。
类与接口之间是实现关系。
接口与接口之间是继承关系,而且,接口之间存在多继承
文章到此结束,如果本次分享的java继承要注意什么和java 中的继承的 优点和缺点 主要是缺点的问题解决了您的问题,那么我们由衷的感到高兴!