「继承树Java」继承树猜三个数字
本篇文章给大家谈谈继承树Java,以及继承树猜三个数字对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java 接口怎么用?应该怎么实现?
- 2、java 继承,重写,重载
- 3、java抽象类位于继承树的抽象层是什么意思?
- 4、JAVA,为什么final类不能被继承,如果定义为final的类该类里面成员变量不特殊说明则是final类还是非final
java 接口怎么用?应该怎么实现?
java语言不支持一个类有多个直接的父类(多继承),但可以实现(implements)多个接口,间接的实现了多继承
用法public class test implements 接口名称
当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象的
比较抽象类与接口
1, 抽象类与接口都位于继承树的上层
相同点
1, 代表系统的抽象层,当一个系统使用一颗继承树上的类时,应该尽量把引用变量声明为继承树的上层抽象类型,这样可以提高两个系统之间的送耦合
2, 都不能被实例化
3, 都包含抽象方法,这些抽象方法用于描述系统能提供哪些服务,但不提供具体的实现
不同点:
1, 在抽象类中可以为部分方法提供默认的实现,从而避免在子类中重复实现它们,这是抽象类的优势,但这一优势限制了多继承,而接口中只能包含抽象方法.由于在抽象类中允许加入具体方法,因此扩展抽象类的功能,即向抽象类中添加具体方法,不会对它的子类造成影响,而对于接口,一旦接口被公布,就必须非常稳定,因为随意在接口中添加抽象方法,会影响到所有的实现类,这些实现类要么实现新增的抽象方法,要么声明为抽象类
2, 一个类只能继承一个直接的父类,这个父类可能是抽象类,但一个类可以实现多个接口,这是接口的优势,但这一优势是以不允许为任何方法提供实现作为代价的三, 为什么Java语言不允许多重继承呢?当子类覆盖父类的实例方法或隐藏父类的成员变量及静态方法时,Java虚拟机采用不同的绑定规则,假如还允许一个类有多个直接的父类,那么会使绑定规则更加复杂,
因此,为了简化系统结构设计和动态绑定机制,Java语言禁止多重继承.而接口中只有抽象方法,没有实例变量和静态方法,只有接口的实现类才会实现接口的抽象方法(接口中的抽象方法是通过类来实现的),因此,一个类即使有多个接口,也不会增加Java虚拟机进行动态绑定的复杂度.因为Java虚拟机永远不会把方法与接口绑定,而只会把方法与它的实现类绑定.四, 使用接口和抽象类的总体原则:
1, 用接口作为系统与外界交互的窗口站在外界使用者(另一个系统)的角度,接口向使用者承诺系统能提供哪些服务,站在系统本身的角度,接口制定系统必须实现哪些服务,接口是系统中最高层次的抽象类型.通过接口交互可以提高两个系统之间的送耦合系统A通过系统B进行交互,是指系统A访问系统B时,把引用变量声明为系统B中的接口类型,该引用变量引用系统B中接口的实现类的实例。
public interface B
{
}
public class C implements B
{
}
public class A
{
}
B a = new C();
2, Java接口本身必须非常稳定,Java接口一旦制定,就不允许随遇更加,否则对外面使用者及系统本身造成影响
3, 用抽象类来定制系统中的扩展点
抽象类来完成部分实现,还要一些功能通过它的子类来实现
java 继承,重写,重载
我来为楼主解答一下:
【继承】
【内容阐述】
继承是使用extends关键字使用继承关系,继承有两点好处,一是促进代码的重用,二是使用多态性访问,继承关系的判断
可以使用instanceof运算符来测试,楼主继承中知道以上就可以了。
【测试1】
Given:
1.
class
Plant{
2.
String
getName(){return
"plant";}
3.
Plant
getType(){return
this;}
4.
}
5.
class
Flower
extends
Plant{
6.
//insert
code
here
7.
}
8.
class
Tulip
extends
Flower{}
在第六行插入以下那段代码能够通过编译,答案不唯一:
A
Flower
getType(){return
this;}
B
String
getType(){return
"ok";}
C
Plant
getType(){return
this;}
D
Tulip
getType(){return
new
Tulip();}//答案在后面
============================================================
【方法的重写】
【阐述】
子类继承父类时,子类就有机会重写父类提供的方法(final方法除外),重写要注意:
1、参数表必须和被重写方法的参数列表完全一致;
2、返回类型要和被重写方法的返回类型或者其子类型一致;
3、访问级别限制符不能比被重写的方法强,可以比他弱;
4、重写方法不能抛出新的检查异常或者比被重写方法声明的检查异常更广泛的异常;
5、不能重写final,static的方法
6、重写就是正在实现一个继承的方法
【测试2】
Given:
public
class
Animal{
protected
void
eat(){}
}
以下为Animal的eat()方法的重写,请指出错误的重写方式并说出理由:
A
private
void
eat(){}
B
public
void
eat()throws
IOException{}
C
public
void
eat(){}
D
public
void
eat(String
str){}
E
public
String
eat(){}
=================================================================
【方法重载】
【阐述】
重载方法允许在类中重新使用相同的方法名称,但具有不同的参数,注意以下几点:
1、被重载的方法必须改变参数列表;
2、被重载的方法可以改变返回类型;
3、被重载的方法可以改变访问修饰符;
4、被重载的方法可以声明新的或更广泛的异常;
5;方法能够在同一个类中或者在子类中被重载;
【测试3】
Given:
1.
class
Programmer{
2.
Programmer
debug(){return
this;}
3.
}
4.
class
MyProgrammer
extends
Programmer{
5.
//insert
code
here
6.
}
以下哪段代码插入第五行可以通过编译:
A
Programmer
debug(){return
this;}
B
MyProgrammer
debug(){return
this;}
C
Object
debug(){return
this;}
D
int
debug(){return
1;}
E
int
debug(int
x){return
1;}
F
Object
debug(int
x){return
this;}
===================================================================
【转型】
【阐述】
转型的过程是编译器通过继承树来判断的,向下转型是转型至更加具体的类,即把父类强制转换成子类的类型,那么这个时
候编译可以通过,但是运行时会出现一个java.lang.ClassCastException的异常,而向上转型是将子类类型转换为父类类型
,这样一点问题都没有,就像这么一句话:向下转型是“车是宝马”,向上转型是“宝马是车”,明显看出对于错。
【测试4】
Given:
1.
class
X{void
do1(){}}
2.
class
Y
extends
X{void
do2(){}}
3.
4.
class
Chrome{
5.
public
static
void
main(String[]
args){
6.
X
x1
=
new
X();
7.
X
x2
=
new
Y();
8.
Y
y1
=
new
Y();
9.
//insert
code
here
10.
}
11.
}
以下哪些插入第九行是正确的:
A
x2.do2();
B
(Y)x2.do2();
C
((Y)x2).do2();
D
None;
=============================================================================
【答案】
1、ACD
2、ABDE
3、ABEF
4、C
希望我的回答对楼主有所帮助!
java抽象类位于继承树的抽象层是什么意思?
您好,提问者:
1、抽象类只是一个特殊的类,但是也具备类的特性。
2、如果这个类中有抽象方法,那么这个类必须定义为抽象类。
3、如果这个抽象类继承了别的抽象类,那么可以不覆盖抽象方法。
因为:这个抽象类也是抽象的,没办法实现方法体。
例如一下代码:
abstract class A{
abstract void add();
public void delete(){}
}
abstract class B extends A{
//继承了抽象A类,因为也是抽象的,可以不写抽象方法,当然也可以重写抽象方法(切记抽象方法是没有方法体的)
//abstract void add(); //也是没有问题的
abstract void getXX();
}
public class extends B{
//必须实现抽象方法
//继承了B,也就继承了A,A B方法都有,所以必须重写这两个抽象类的抽象方法
public void add(){}
public void delete(){}
public void getXX(){}
}
JAVA,为什么final类不能被继承,如果定义为final的类该类里面成员变量不特殊说明则是final类还是非final
这是final的规定。当将final用于类身上时,一个final类是无法被任何人继承的,那也就意味着此类在一个继承树中是一个叶子类,并且此类的设计已被认为很完美而不需要进行修改或扩展。
对于final类中的成员,可以定义其为final,也可以不是final。而对于方法,由于所属类为final的关系,自然也就成了final型的。也可以明确的给final类中的方法加上一个final,但这显然没有意义。
采用final方法的第二个理由是程序执行的效率。将一个方法设成final后,编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。
只要编译器发现一个final方法调用,就会(根据它自己的判断)忽略为执行方法调用机制而采取的常规代码插入方法(将自变量压入堆栈;跳至方法代码并执行它;跳回来;清除堆栈自变量;最后对返回值进行处理)。
扩展资料
final关键字的基本用法:
1、修饰类
当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
2、修饰方法
final修饰的方法表示此方法已经是“最后的、最终的”含义,亦即此方法不能被重写(可以重载多个final修饰的方法)。此处需要注意的一点是:因为重写的前提是子类可以从父类中继承此方法,如果父类中final修饰的方法同时访问控制权限为private。
将会导致子类中不能直接继承到此方法,因此,此时可以在子类中定义相同的方法名和参数,此时不再产生重写与final的矛盾,而是在子类中重新定义了新的方法。
3、修饰变量
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化。
如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用的值是一个地址,final要求值,即地址的值不发生变化。
关于继承树Java和继承树猜三个数字的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。