您的位置:首页 > 编程语言 > Java开发

java之面向对象:继承extends、super、覆盖override的用法

2016-11-26 14:57 411 查看

继承的好处:

1 )提高了代码的复用性。

2 )让类与类之间产生了关系,给第三个特征多态提供 了前提。

java支持单继承,不直接支持多继承,但对C++中的多继承机制进行改良。

单继承:一个子类只能有一个直接父类。

class A
{

}
class B
{

}
class C extends A  //单继承
{

}

多继承:一个子类可以有多个直接各类(java中不允许,进行改良)。

java不直接支持多机场是因为多继承可能会有一些问题,比如多个父类中如果有相同的函数(名字,返回值,参数列表都一样),子类调用该函数就会出现歧义性(不确定性),子类不知道调用哪一个。java中使用了接口来弥补多继承。

class A
{

}
class B
{

}
class C extends A,B  //多继承
{

}


java支持多层(多重)继承

class A
{

}
class B extends A
{

}
class C extends B
{

}

super关键字

当类与类之间存在着所属关系的时候,就定义继承。

super关键字

当本类的成员和局部变量同名用this区分。

当子父类中的成员变量同名用super区分。

this和super的用法很相似。

class A
{
int num = 4;
}
class B extends A
{
int mum = 5;

void show()
{
System.out.println(this.num+"..."+super.num); //输出5...4
}
}

this和super用法的区别。

this:代表一个本类对象的引用。

super::代表一个父类空间。子类继承父类后,就持有super关键字来访问父类空间。

注意:子类不能访问父类私有的内容。

覆盖的用法:

当子父类中出现成员函数一模一样的情况,会运行子类的函数。

这种现象称为覆盖操作。

函数有2个特性:

 1 重载: 同一个类中,overload

 2 覆盖: 子类中,覆盖也称为重写,覆写,override

class A
{
void show()
{
System.out.println("fu show");
}
}
class B extends A
{
void show()
{
System.out.println("zi show");
}
}

覆盖的注意事项:

1 子类方法覆盖父类方法时,子类函数权限必须大于等于父类函数的权限。 (权限由严格到开放的顺序  priavate=>protected=>默认权限=>public)

比如父类函数权限是默认权限,子类是private的,是不允许的。

但是父类函数权限是private,子类函数权限是public这其实也不是覆盖。因为父类是私有的,父类自己都不打算给父类对象用了,谈何覆盖?

2 静态只能覆盖静态,父类的静态方法只能被子类的静态方法覆盖。

什么时候使用覆盖操作?

当对一个类进行子类的拓展时,子类需要保留父类的功能声明。

但是要定义子类中该功能的特有内容时,就使用覆盖完成。

class Phone
{
void call()
{

}
void show()
{
System.out.println("number");
}
}
class NewPhone extends Phone
{
void show()
{
super.show();
System.out.println("pic");
System.out.println("name");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐