java为什么要单继承?java中为什么要使用继承
大家好,今天给各位分享java为什么要单继承的一些知识,其中也会对java中为什么要使用继承进行解释,文章篇幅可能偏长,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在就马上开始吧!
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
类与类之间是继承关系。
类与接口之间是实现关系。
接口与接口之间是继承关系,而且,接口之间存在多继承
C++中有多继承,java 为什么只有单继承
Java不支持多继承,但是通过一些巧妙的设计来达到和多继承同样的效果
通过接口、内隐类,继承、实现,互相配合,达到多继承的效果
1、Java中一个类不能继承多个具体class。
2、一个类只可继承自一个具体 class,但可实现多个接口。
interface不涉及到实现细节,不与任何存储空间有关连。
可以实现合并多个 interface,达到可向上转型为多种基类的目的。
新类可继承自一个具象class,其余继承都得是interfaces。
3、outer class不可继承自多个具体 class,可在其内部设多个inner class,每个inner class都能各自继承某一实现类。
inner class不受限于outer class是否已经继承自某一实现类。
4、inner class可以说是多重继承问题的完整解决方案。
inner class可“继承自多个具象或抽象类”。
一个类不能继承自多个一般类。
JAVA中什么是继承
继承在本职上是特殊一般的关系,即常说的is-a关系。子类继承父类,表明子类是一种特殊的父类,并且具有父类所不具有的一些属性或方法。
1.Java继承的语法格式:
Java继承的关键字是:extends
public class子类名 extends父类名{...}
如: public class UNStudent extends Student{...}注:1.子类又称超类,拓展类;父类又称基类。
2.Java中类的继承只能是单继承(单根继承),即一个类只能继承一个父类,但是一个类可以由多个类来继承它。
3.Java会给每一个没有设置父类的类,自动添加一个父类就是Object。
扩展资料:
一、子类继承父类的结果
1.子类继承父类后,继承到了父类所有的属性和方法。注:是所有。
2.子类可调用的方法也要看情况而定:
子类和父类在同一个包下时“子类和子类的对象”可以调用父类的默认的,受保护的,公有的属性以及方法。
子类和父类在不同的包下时,在子类中可以调用受保护的,公有的属性以及方法,而子类的对象可以调用受保护的,公有的属性以及方法。
二、方法的重写
1.当子类和父类都有某种方法,而子类的方法更加要求细致,或者实现功能不同,就需要方法的重写。
2.重写条件
①必须要存在继承关系;只有继承之间的关系才能有方法的重写
②方法的返回值类型,方法名,参数个数,参数类型,参数顺序,必须要完全一致;
如:父类中方法 public void play(int n; String s){方法体1...}
重写后的子类方法public void play(int n; String s){方法体2...}
3.子类重写方法时的访问修饰符可以大于或者等于父类方法的访问修饰符。
4.重写后的方法会被优先调用。
三、自动转型
自动转型的实现要求有继承关系
格式如下:父类名对象名= new子类构造方法;
如:Student stu= new UNStudent;
而强制转型格式如下:子类名对象名=(子类名)父类对象名
如:UNStudent un=(Student)stu;
自动转型可以拓宽方法的作用访问域
在使用自动转型后,子类自己定义的方法是不能在自动转型后执行;
原因是因为Java的编译机制,它会优先判断父类中是否存在该方法,如果存在则通过编译,如果不存在则报错。
第二种自动转型:转型后只需要不同类的不同对象调用想吐的方法,很方便!
/**访问修饰符返回值数据类型方法名(父类类型参数名,...){
调用方法。
}
父类名对象名= new子类名;
子类名对象名= new子类名;
方法名(对象名);
*/
比如拿到驾驶证为A2的人,可以驾驶重型货车,当然也可以驾驶大型货车,中型货车,小型货车,小客车,小轿车,摩托车...可以选择第二种自动转型的方法,便于调用同一个方法。
自动转型好处:1.减少冗余代码;2.在方法设置参数时,扩大访问范围。
四、多态
多态是由方法重载,继承,方法重写,自动转型等技术的组合。
五、为什么需要继承?
1.提高代码的重用性。
2.提高程序的扩展性。
参考资料:
JAVA继承总结
java某个类既要继承又要实现接口,为什么继承要写在前面啊
因为java在设计的时候所有的类都是继承于Object类,而且java的继承是单继承的,不像C++可以都继承。而接口弥补了单继承的不足!
就像楼上说的:如果lz你extends女生,那就说明你是个女的,如果你不继承女生那你就不是女的。你只是个对象。但是并不是所有女生都会有生育功能,也许生育功能需要用接口实现。实现了生育方法的女人才能生小baby,没实现的就生不了!
例子有点粗糙,自己理解下就ok了!
文章分享结束,java为什么要单继承和java中为什么要使用继承的答案你都知道了吗?欢迎再次光临本站哦!