继承与阻止继承——20170313 学习笔记

1.is-a 是继承的一个明显特征。

2.关键字extends表明正在构造的新类派生于一个已存在的类。

3.子类比父类(超类)拥有的功能更加丰富。

4.在设计类的时候,应该将通用的方法放在超类中,而将有特殊用途的方法放在子类中。

5.在子类中可以增加域,增加方法,或者覆盖超类的方法,然而,绝对不能删除继承的任何域和方法

6.super(n,s,year,month,day);是"调用超类Employee中含有n,s,year,month,day参数的构造器"的简写形式。

7.由于manager类的构造器不能访问Employee类的私有域,所以必须利用Employee类的构造器对这部分私有域进行初始化,我们可以通过super实现对超类构造器的调用。使用super调用构造器的语句必须是子类构造器的第一条语句。

8super关键字的两个用途:

一是调用超类的方法,而是调用超类的构造器。

9.一个对象变量(例如,变量e)可以引用多种实际类型的现象被称为多态,在运行时能够自动的选择调用哪个方法的现象称为动态绑定


阻止继承

不允许扩展的类被称为final类,

一个类前面被final修饰,那这个类不允许继承。而类中的方法也可以被声明为final,表明子类就不能覆盖这个方法(final类中的所有方法自动成为final方法)。

域也可以被声明为final,对于final域来说,构造对象之后就不允许改变它们的值了。不过,如果将一个类声明为final,只有其中的方法自动成为final,而不包括域。

强制类型转换

强转的使用:只能再继承层次内进行类型转换。

在将超类转换成子类之前,应该使用instanceof进行检查。


抽象类:

包含一个或多个抽象方法的类本身必须被声明为抽象的。

抽象类中也可以包含具体数据和具体方法。

类即使不含抽象方法,也可以将类声明为抽象类。

抽象方法充当着占位 的角色,它们的具体是实现在子类中。扩展抽象类可以有两种选择。一种是在子类中定义部分抽象的方法或抽象方法也不定义,这样就必须将子类也标记橙抽象类;另一种是定义全部的抽象方法,这样一来,子类就不是抽象的了。

继承一个抽象类的时候,如果父类中有抽象方法,子类必须去实现。

package cn.itcast.demo;

import java.util.Random;

public class PersonTest {

	public static void main(String[] args)
	{
		person[] people = new person[2];
		people[0] = new Employee("jingli",50000);
		people[1] = new Student("xiaoming","fujinyizhong");
		for(person p:people)
		{
			System.out.println("name="+p.getName()+","+p.getDescription());
		}
	}
}
 abstract class person
 {
	 private String name;
	 public person(String n)
	 {
		 name = n;
	 }
	  public abstract String getDescription();
	  public String getName()
	  {
		  return name;
	  }
 }
 class Employee extends person 
 {
	 private double salary;
	 private int id ;
	 private static int nextId;
	 public Employee(String n,double s )
	 {
		 super(n);
		 salary = s;
	 }
	 public double getSalary()
	 {
		 return salary;
	 }
	 public int getId()
	 {
		 return id;
	 }
	 public String getDescription()
	 {
		 return String.format("an Employee with a salary of $%.2f", salary);
	 }
	 static
	 {
		 Random r = new Random();
		 nextId = r.nextInt(500);
	 }
	 {
		 id = nextId;
		 nextId++;
	 }
 }
 class Student extends person
 {
	 private String major;
	 public Student(String n,String m)
	 {
		 super(n);
		 major = m;
	 }
	 public String getDescription()
	 {
		 return "a student major in "+major;
	 } 
 }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值