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)

 

posted @ 2018-07-04 17:36  annofyf  阅读(104)  评论(0编辑  收藏  举报