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
类与类之间是继承关系。
类与接口之间是实现关系。
接口与接口之间是继承关系,而且,接口之间存在多继承
java 实现接口和继承有什么区别
首先的话,在 Java中应该说“扩展”(extend)而不是“继承”(inherit),尽管知道它实现上就是C++那种继承,但逻辑上是不完全相同的。
再考虑到接口即协议,对接口的扩展,或是说对协议的扩展,实际上就包括了对其公用方法的扩展以及对其定义的扩展两个方面,其中扩展接口定义实际上即为对协议添加更多的约束,在减少了其可能包含的类的种类的同时也给了这些类更清晰的定义,也就允许用户基于这更清晰的定义做出更多的操作了。
所以呢,实际类的扩展实际上和继承是相同的,子类确实继承了父类的实现,但接口的扩展则只会获取到父接口的方法声明,继承的意味并不明显,更多的实际上在于对其原协议的扩展,因此应将子接口和父接口间的关系视为扩展而不单单是继承
其实就是多去思考为什么在Java这叫扩展不叫继承,很多问题就迎刃而解了
java 使用接口的好处
什么是接口?
Java中的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口的两种含义:一,Java接口,Java语言中存在的结构,有特定的语法和结构;二,一个类所具有的方法的特征集合,是一种逻辑上的抽象。前者叫做“Java接口”,后者叫做“接口”。
在Java语言规范中,一个方法的特征仅包括方法的名字,参数的数目和种类,而不包括方法的返回类型,参数的名字以及所抛出来的异常。在Java编译器检查方法的重载时,会根据这些条件判断两个方法是否是重载方法。但在Java编译器检查方法的置换时,则会进一步检查两个方法(分处超类型和子类型)的返还类型和抛出的异常是否相同。
接口继承和实现继承的规则不同,一个类只有一个直接父类,但可以实现多个接口。
Java接口本身没有任何实现,因为Java接口不涉及表象,而只描述public行为,所以Java接口比Java抽象类更抽象化。
Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public,静态的和final属性。
接口把方法的特征和方法的实现分割开来。这种分割体现在接口常常代表一个角色,它包装与该角色相关的操作和属性,而实现这个接口的类便是扮演这个角色的演员。一个角色由不同的演员来演,而不同的演员之间除了扮演一个共同的角色之外,并不要求其它的共同之处。
为什么使用接口?
两个类中的两个类似的功能,调用他们的类动态的决定一种实现,那他们提供一个抽象父类,子类分别实现父类所定义的方法。
问题的出现:Java是一种单继承的语言,一般情况下,哪个具体类可能已经有了一个超类,解决是给它的父类加父类,或者给它父类的父类加父类,只到移动到类等级结构的最顶端。这样一来,对一个具体类的可插入性的设计,就变成了对整个等级结构中所有类的修改。
接口是可插入性的保证。
在一个等级结构中的任何一个类都可以实现一个接口,这个接口会影响到此类的所有子类,但不会影响到此类的任何超类。此类将不得不实现这个接口所规定的方法,而其子类可以从此类自动继承这些方法,当然也可以选择置换掉所有的这些方法,或者其中的某一些方法,这时候,这些子类具有了可插入性(并且可以用这个接口类型装载,传递实现了他的所有子类)。
我们关心的不是那一个具体的类,而是这个类是否实现了我们需要的接口。
接口提供了关联以及方法调用上的可插入性,软件系统的规模越大,生命周期越长,接口使得软件系统的灵活性和可扩展性,可插入性方面得到保证。
类型
使用Java接口将软件单位与内部和外部耦合起来。使用Java接口不是具体的类进行变量的类型声明,方法的返还类型声明,参量的类型声明,以及数据类型的转换。
在理想的情况下,一个具体的Java类应当只实现Java接口和抽象Java类中声明的方法,而不应当给多余方法。
类型等级结构
Java接口(以及抽象类)一般用来作为一个类型的等级结构的起点。
如果一个类已经有了一个主要的超类型,那么通过实现一个接口,这个类可以拥有另一个次要的超类型,这种次要的超类型叫做混合类型。
Java接口常用方法
单方法接口
public inte***ce Actionlistener(){
public abstract void actionPerformed(ActionEvent event);
}
仅且只有一个方法,只有实现了这个接口(重写这个接口中的唯一一个方法),你才有资格去事件监听器列表里注册(参数为Actionlistener类型),当事件源变动时,自动调用这个唯一的actionPerformed方法。
标识接口
是没有任何方法和属性的接口。标识接口不对实现它的类有任何语意上的要求,它仅仅表明了实现它的类属于一个特定的类型(传递)。
不推荐过多的使用标识接口。
常量接口
用Java接口来声明一些常量,然后由实现这个接口的类使用这些常量(以前在做画板的时候这么干过)。建议不要模仿这种常量接口的做法。
OK,关于java 继承接口有什么用和java 实现接口和继承有什么区别的内容到此结束了,希望对大家有所帮助。