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)