Java学习笔记_180704_类继承
面向对象三大特性:封装、继承、多态
1.方法重写
1.1方法重写(Override)区别于方法重载(Overloading):
>方法重写是在子类中对父类方法进行方法体的重写,要求重写后返回值形参与父类一致,要求同名同参
>方法重载是指在类内部对方法的形参进行改写,要求同名异参
public class SuperClass{
public string m(string str){
return "super"+str;
}
}
public class SonClass extends SuperClass{
@Override
public string m(string str){
return "son"+str;
}
}
1.2方法重写与多态
//Base.java
public class Base {
int count=10;
public void display(){
System.out.println(count);
}
}
//Sub.java
public class Sub extends Base {
int count = 20;
// public void display(){
// System.out.println(count);
// }
}
//Test.java
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Sub sub = new Sub();
Base base = sub;
System.out.println(base==sub);
System.out.println(sub.count);
System.out.println(base.count);
sub.display();
base.display();
}
}
输出为:
true 20 10 10 10
base和sub指向同一个对象由于display()没有重写所以连个子类Sub中所继承的方法相当于
public void display(){
System.out.println(super.count);
}
因此输出为10
若进行了方法的重写,则输出为20
2.访问权限修饰符
权限修饰符主要针对成员变量和成员方法
| 修饰符 | 类内部 | 同一包 | 子类 | 任何地方 |
| private | Yes | |||
| default | Yes | Yes | ||
| protected | Yes | Yes | Yes | |
| public | Yes | Yes | Yes | Yes |
class的权限修饰可以用public和default
3.关键字super
super与this类似,主要用在构造器和重写的方法内如下代码所示:
public class Circle {
private double radius;
public Circle(){
radius=1.0;
}
public void setRadius(double radius){
this.radius = radius;
}
public double getRadius(){
return radius;
}
public double findArea(){
return Math.PI*Math.pow(radius, 2);
}
}
public class Cylinder extends Circle{
private double length;
public Cylinder(){
super();
length=1.0;
}
public void setLength(double length) {
this.length = length;
}
public double getLength() {
return length;
}
public double findVolume(){
return length*super.findArea();
}
}
最好在父类中构造无参构造器,否则编译器可能会报错,提示没有可继承的构造器(Constructors)

浙公网安备 33010602011771号