继承,重写,多态

在继承的情况下,子类的方法满足如下:
//要有继承关系
1.方法名相同
2.参数列表相同
3.返回值类型相同,
4.访问修饰符的权限不能小于父类方法
5.抛出的异常不能大于父类(严于)
6.方法的重写或方法的覆盖(overriding)
1)子类根据需求对从父类继承的方法进行重新编写
2)重写时,可以用super.方法的方式来保留父类的方法
3)构造方法不能被重写

比较项 位置 方法名 参数表 返回值 访问修饰符
方法重写 子类 相同 相同 相同或是其子类 不能比父类更严格
方法重载 同类 相同 不相同 无关 无关
重载和重写有什么区别和联系
重载涉及同一类中的同名方法,要求方法名相同,参数列表不同,与返回值得类型无关
重写涉及的是子类和父类之间的同名方法,要求方法名相同,参数列表相同,,返回值类型相同
多态
//含义是指能够呈现出多种不同的形状或形态。而在程序语言中
它意味着一个特定变量可以引用不同类型的对象,、并且能自动的调用
引用的对象的方法,也就是根据作用到的不同对象类型,响应不同的2操作。
方法重写是实现多态的基础。
代码的示例
//人类(父类)
Public class Person{
String name;
int age;
public void eat(){
systerm.out.println(“人:吃饭”);
}
public void walk(){
system.out.println(“人:走路”);
}
*********************************************子类
public class Man extends Person{
boolean isSmoking;
public void earnMoney(){
System.out.println(“男人负责挣钱养家”);
}
public void eat(){
System.out.println(“男人多吃肉,长肌肉”)//方法的重写
}
public void walk(){
System.out.println(“男人霸气走路”) //方法的重写
}
*********************************************************子类
public class Woman extends Person{
boolean isBeauty;
public void goShooping(){
System.out.println(“女人喜欢购物”);
}
public void eat(){
System.out.println(“女人少吃,为了减肥”);//方法的重写
}
public void walk(){
System.out.println("女人窈窕的走路’);//方法的重写
}
}
******************************************************************测试类
public class PersonTest{
public static void main(String[] args){
Person p1=new Person;
p1.eat();

Man man=new Man();
man.eat();
man.age=25;
man.earnMoney();


//对象的多态性:父类的引用指向子类的对象
Person p2=new Man();
Person p3=new Woman();
//多态的使用:当调用子父类同名同参数的方法时,实际执行的是子类重写父类的方法
p2.eat();
p2.walk();
//必须调用的是左边方法,但执行的时候是右边子类执行的方法
//不能调用子类所特有的方法,编译时,p2是Person类型
//p2.earMoney();程序为报错
有了对象的多态性以后,内存中实际上是加载了子类特有的属性和方法,但由于变量声明为父类类型,导致编译时,只能调用父类中声明的属性和方法
子类特有的属性和方法不能调用
//如何才能调用子类特有的属性和方法?如图参考:
在这里插入图片描述
Man m1=(Man) p2;
m1.earnMoney();
m1.isSmoking=true;
//使用强转时,可能出现ClassCastException
//Woman w1=(Woman)p2;
w1.goShooping();
//instanceof 关键字的使用
a instsnceof A:判断对象a是否是类A的实列。如果是,则返回true;如果不是,返回false、
if(p2 instanceof Woman){
Woman w1=(Woman) p2;
w1.goShooping();
System.out,println(*********Woman);
}
if(p2 instanceof Man){
Man w2=(Man) p2;
w2.earnMoney();
System.out,println(*********Woman);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值