重写

父类引用变量 可以 引用子类的对象
通过父类的引用只能访问父类里面的属性和方法

多态
重写了父类中的方法
通过父类的引用 就可以 调用子类自己的方法

面向对象的三大特征:封装 继承 多态

封装:把事物的特征抽象为属性 把事物的行为抽象为方法  然后再加以访问控制属性的限制 

继承:一个类继承另外一个类 这个类称为子类 被继承的类称为父类 子类拥有父类的属性和方法	
多态:用父类类型的引用变量引用子类类型对象时,如果子类重写父类中的方法,那么这个时候调用该方法是调用这个引用变量所引用对象的类型的方法
一种类型  多种形态

在没有重写的情况下:
父类类型的引用变量 即使引用的是 子类对象 这个时候只能访问父类中的属性和方法

在有重写的情况下:
父类类型的引用变量 引用的是 子类对象
调用被重写的方法时,这个时候调用的是子类自己重写的方法

class F{
int x;
public void show(){}
public void fun(){}
}

class S extends F{
int y;
public void show(){}
public void test(){}
}

F f = new S();//通过f只能调用show()方法和fun()方法
//但是由于子类S重写了父类中的show()方法,所以通过f.show()调用的其实是子类的方法
不能能过f调用test()方法

F f = new F();

重写: 子类重写父类同名的方法

1.父类中的私有方法是不能被重写的
2.子类重写父类的方法时 子类方法的访问控制属性 要比 父类中方法的 访问控制属性一样或者更加宽泛
public > protected > default > private
3.重写关于返回值类型
如果是基本数据类型 必须要一致
如果是引用数据类型 那么 子类可以返回 父类方法返回值类型 的子类

重载 和 重写:
重载:在同一个作用域里,方法名相同,参数列表不同即构成重载
重载在编译阶段会根据调用方法所传递的参数的个数和类型来绑定调用哪个方法
编译时语法 静态绑定
重写:在父子类中,子类重写父类中同名且参数列表相同的方法
在运行时阶段,会根据引用变量引用的"对象的类型"来决定调用父类或者子类中的方法
运行时语法 动态绑定

  引用变量的类型是固定的  但是 引用变量所引用的对象的类型是不一定的

访问控制属性:
类 同一个包的类里面 子类 其它类
public YES YES YES YES 任何地方都可以访问
protected YES YES YES NO
default YES YES NO(YES 子类在同一个包) NO 以包为界限
private YES NO NO NO

public和private是使用最广泛
一个.java文件中 只能有一个类可以被public修饰 这个类就是和文件名相同的那个类

final修饰的方法不能被重写
final修饰的类不能被继承

继承 父类的引用变量 引用子类对象 只能访问父类中的属性和父类中声明过的方法


class Shape{

public double len(){}
public double area(){}

}

抽象方法: 没有方法体
当一个方法没有具体实现时或者不知道怎么实现时,可以声明为抽象方法
在方法前有一个修饰词 abstract 抽象方法的方法体不需要实现
拥有抽象方法的类是抽象类
抽象类不可以实例化对象

抽象方法一般在子类中实现(重写)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值