面向对象三大特征之 继承

java面型对象三大特征之继承

重点速览:

  1. 使用extends.父类名,实现javadji继承,如果没有则默认为继承了java.lang.object;
  2. java中只允许单继承,如果想实现多继承的效果就要用到接口
  3. 子类可以通过继承来获得父类属性为public 、protected、default的成员变量,成员方法,但不可以继承private的方法和变量
  4. 用final修饰的类不能被继承,用final修饰的常量值不能被改变,用final修饰的方法不能被重写(慎用,好坏皆有)
  5. this and super关键字使用

一 .如何实现继承

 java中只支持单一继承,子类只能继承非private修饰的成员

1.单一继承

  • 继承外部类
public class Teacher extends people {
private String course;

}
 
  • 继承内部类

public class Book {
class science{
	public void intro(){
		System.out.println("这本书属于科学类");
	}}
	class physic extends Book.science {
		public void intro(){
			super.intro();
			System.out.println("这本书是物理书");
		}
	}

public static void main(String[] args){
	Book b=new Book();
	science s=b.new physic();
	s.intro();
}
}
这本书属于科学类
这本书是物理书

2.多继承关系

这里所讲的多继承实际上使用的是接口,实现了多继承关系,java中类的继承只能是单继承

public class Teacher extends people implements a{
private String course;
public void worktime(){
	System.out.println("星期一9:00-10:00");
}
}
interface a{
	public void worktime();
}

二.抽象类

java中比较特殊的类,类中包含有方法的声明而没有方法的实现。当然抽象类中也可以包含已经实现的方法,在使用中不能实例化抽象类,但可以实例化继承抽象类的子类

public class Book extends knowledge {
public void pass(){
	System.out.println("以纸为载体进行传播");
}
public static void main(String[] args){
	Book b=new Book();
	b.price();
	b.pass();
}
}
abstract class knowledge{//这是我们定义的抽象类
	public void price(){
		System.out.println("知识是无价的");
	}
	public void pass();
}

知识是无价的
以纸为载体进行传播

三.final关键字

  • 用final修饰常量

变量用final修饰后变为常量,常量的值不能改变

public class Main {
public static void main(String[] args) {
	final int a=10;
	System.out.println(a);
	a=23;
	
}	
}

这时候虚拟机就抛出异常,提示:

The final local variable a cannot be assigned. It must be blank and not using a compound assignment
  • final修饰方法

方法经过final修饰后,这个方法就不可以被重载了------也就失去了面向对象的特点

public class Final {
//定义fnal修饰的方法
	public final void display() {
		System.out.println("这是父类的final方法");
	}
}
class SonFinal extends Final{
	public void display() {
		System.out.println("这是子类重写父类的方法");
	}
}

这样经过Main()方法调试之后就抛出异常了,这是异常:

class Fl.SonFinal overrides final method display.()
他说我们重写了final方法,总之在父类中写final方法有很多的限制,方法重写就受限制了。
  • final修饰类

用final修饰该类后,该类就不能被继承了

public final class Final {
//定义fnal修饰的方法
	public  void display() {
		System.out.println("这是父类的final方法");
	}
}
class SonFinal extends Final{
	public void display() {
		System.out.println("这是子类重写父类的方法");
	}
}

类似的代码,这样之后又会显示异常了:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	Type mismatch: cannot convert from SonFinal to Final
	at Fl.Main.main(Main.java:5)
关键信息:cannot convert(变换)from  SonFinal(自定义的子类) to Final(父类)







posted @ 2018-03-12 18:49  sunchongwei  阅读(98)  评论(0编辑  收藏  举报