继承注意实现所有的抽象州迹类 私有或静态成员 构造函数 不能继承 继承实现或重写父类方法不能 缩小父类空李访问符 冲写方法注意参数 函数 返回值不能错 等等 还有其他注册亏并意的地方 得自己练习
❷ 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
希望我的回答对楼主有所帮助!
❸ 方法的重载与重写
1.必须在同一个类中
2.方法名称必须相同,参数列表必须不同(参数的类型,个数,顺序)
3.方法返回值与访问修饰符任意
4.与方法的参数名称无关
1.在有继承关系大握的子类中
2.方法名称与参数列表(参数类型,个判咐数,顺序)必须相同,返回值必须相同(补:也可以时父类中的子类)
3.访问修饰符,访问范围要大于等于父类的访问范围
4.与方法的参数名称无关
重写掘仿纯的概念只适用于方法上面,但是在子类中可定义与父类中重名的属性
❹ java中 关于方法的覆盖 重载 重写
覆盖又叫重写,因此重写和覆盖是一个概念。它是覆盖了一个方法并且对其重写,以求达到不同的作用。形式有:对接口方法的实现,在继承中也可能会在子类覆盖父类中的方法。
重载:它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。
举例:
publicclassParent{//定一个类
publicvoidread(){
}
publicvoidshow(){//重载了show方法
}
publicvoidshow(inta){//重载了show方法,比第一个方法多了一个参数
}
}
publicclassSonextendsParent{//son类继承父类parent
publicvoidread(){//覆盖了父类的read方法。
}
}
❺ 方法的重载和重写问题
方法重载是让类以统一的方式处理不同类型数据的一种手段。Java的方法重载,就旅饥是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法弊派时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法。
简单的说
方法重载就是方法名称重复,加载参数不同。
一.方法名一定要相同。
二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。
1.如果参数个数不同,就不管它的参数类型了!
2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同。
在java中方法的返回类型不做为方法重载的标识:
在java核心技术中:
public String m1 () {
// 逻辑1
return “1”; // 随便返回一个值,没有意义,只是展示
}
public void m1 () {
// 逻拆卜返辑2
return 0; // 随便返回一个值,没有意义,只是展示
}
上面2个方法“重载”,只是返回值不同
当执行: m1();
JVM是不知道执行那个方法的,因此返回值不做为重载的标志
方法重写(overiding method)
在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。
如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。
方法重写的特性
1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
2.子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)
根据2,3条是不是能确定第一条,子类方法的返回值必须是父类方法返回值的子类。
❻ extend继承、override重写、overload重载总结
多态是面向对象语言的一个重要特性
多态的优点:
1. 消除裤隐类型之间的耦合关系
2. 可替换性
3. 可扩充性
4. 接口性
5. 灵活性
6. 简化性
多态存在的三个必要条件
继承
重写(重写只针对于成员方法,不能重写变量和静态方法)
父类引用指向子类对象(向上转型,父类引用只能调用父类中定义过的方法(如果子类重写了,则调用子类的,动态链接)和变量)。
1、extend继承
父类和子类同包,子类可以继承父类的所有非private修饰类型
父类和子类不同包,子类只可以继承父类public、protected修饰(不能被其它类访问)
2、override重写
有继承才能有重写
子类重写父类方法需要注意:
1、访问权限不能比父类更低。
2、粗知父类的方法签名没有抛出异常,子类重写时也不能抛出异常。父类方法签名有抛出异常,子类重写不能抛出父类签名异常的范围更宽(如父类抛出IOException,子类不能抛出Exception)。
3、方法名、返回值、形参类型个数不能改变。
3、overload重载
方法名相同,形参个岩纯消数不同或者类型不同构成方法重载。
注意:访问权限不同,返回值不同并不能构成重载。
❼ java语言中的重写、重载、继承
重写重载发生在函数上,继承发生在类上!
重写在继承的基础之上;
重载与重写都是函数的特性,
重载只看参数列表,重写要看函数所有:(权限,返回值类型,函数名必须一样,参数类型与个数必须一样);
我给你通俗点打比方,可能不是很恰当,只希望明白就好!
//先说重载!
class小明
{
/*小明会射击至于哪种类型的武器代表参数*/
//方法1
尘橘void射击(int弓)
{
}
//方法2
void射击(String枪)
{
}
//方法3
void射击(String枪,int弓)
{
}
/*方法名都一样,只是参数列表不一样*/
}
/*----------------------说说继承!-----------------------------------*/
class小明爹
{
//方法1
void射击(int弓洞如)
{
}
}
class小明extends小明爹
{
纳兄启//这里什么都没定义!
//什么都没有的情况下,小明就有他爹的射击这个方法了!
}
/*--------------------------重写-----------------------------*/
class小明爹
{
//方法1
void射击(int弓)
{
蛙泳式;
}
}
class小明extends小明爹
{
//小明觉得他爹的射击姿势很不给力,他决定覆盖他爹的方法,也称为重写!
void射击(int弓)
{
狗刨式;
}
}
//如果实例化小明以后,调用这个射击的动作就是小明自己的了,明白吗?
//当然其实也能调用他爹的,这个需要他爹内部对外提供一个方法即可!
//默认实例化完以后,在调用射击这个方法,就是小明的狗刨式了!
比喻不是很恰当,只希望你能明白!和你一样,我也是初学者!基础部分很关键!
❽ 求JAVA代码和对继承、方法的重载和重写的理解
继承,从字面上就可以得知其意思。也是代码重用的一个思想。意思就说,继承了父类以后,子类就和父类有相同的结构,从而保证可以向上转型,也就是多态。说白了,就是子类有父类的全部行为,但是父类不一定有子类的全部行为。
方法的重写也就是对父类的方法拓展。例如父类有一个A方法,子类继承父类之后也有一个A方法,子类对这个A方法感到不桐弊满意,或者想要添加几句代码,就可以通过重写来拓展父类的方法。
-------------------------
立方体类:有长、宽、高三个基本属性,构成了橡岁一个立方体。然后在写几个方法,用来计算局如族体积,面积等就可以了。
---------------------
面向对象最大的好处莫过于对现实事物中的抽象和描述了。
解答完毕。
❾ java语言中的重写、重载、继承
重写,英文名是override,是指在继承情况下,子类中定义了与仔乱其基类中方法具有相同型构的新方法,就叫做子团改类把基类的方法重写了。这是实现多态念或档必须的步骤。
重载,英文名是overload,是指在同一个类中定义了一个以上具有相同名称,但是型构不同的方法。在同一个类中,是不允许定义多于一个的具有相同型构的方法的。
❿ 继承,多态,重载和重写的区别
重载,继承,重写,多态的区别
继承:当多个类具有相同的特征(属性)和行为(方法),为了实现代码复用,需要子类继承父类的特征和行为。使得子类具有父类的各种属性和方法,除了具扰首有父类的特征和行为,还具有一些自己特殊的特征和行为。
多态:当一个类需要表现出多种形态,具有多种实现方式。避免了在父类里大量重载引起代码臃肿且难于维护,增强程序的可扩展性及可维护性,使代码更加简洁。子类重写父类的方法。使子类具有不同的方法实现。
可以简单理解为:继承是模袜子类使用父类的方法,而多态则是父类使用子类的方法。
重写:如果在子类中定义的一个方法,其名称、返回类型及参数列表正好与父类中某个方法的名称、返回类型及参数列表相匹配,那么可以说,子类的方法重写了父类的方法。
重载:多个同名而不同参数的方法之间,互相称之为重载方法。
接口:接口把方法的特征和实现分割开来缓码数。它本身没有任何实现,不涉及表象,只描述public行为,所以接口比抽象类更抽象化。但是接口不是类,所以不能被实例化。
下列测试代码:
package cn.lufice.test02;
public class Instrument {
public void play(int i){
System.out.println("Instrument"+i);
}
//重载
public void play( int i,String str){
System.out.println("Brass "+i+" "+str);
}
}
public class Brass extends Instrument {
public void play( int i,String str){
System.out.println("Brass "+i+" "+str);
}
}
public class Wind extends Instrument{
//重写
public void play(int i){
System.out.println("Wind "+i);
}
public static void main(String[] args) {
Instrument instrument = new Wind();//多态
Brass brass = new Brass();//继承
instrument.play(10);
brass.play(20,"barss");
}
}
/*Output:
Wind 10
Brass 20 barss
*/