我的java学习笔记(8)关于多态

关于多态

1.在java程序语言中,对象变量是多态的。

2.不能讲一个超类的引用赋给子类变量。

3.private方法,static方法,final方法或者构造器,那么编译器将可以准确的知道应该调用哪个方法,我们将这种调用方式称为静态绑定。

4.动态绑定有一个非常重要的特性:无需对现存的代码进行修改,就可以对城乡惊喜扩展。

5.在覆盖一个方法的时候,子类方法不能低于超类方法的可见性。

6.不允许扩展的类被称为final类。

7.如果将一个类声明为final,只用其中的方法自动的成为final,而不包括域。

8.将一个值存入变量时,编译器将检查是否允许该操作。将一个子类的引用赋给一个超类变量,编译器是允许的。但将一个超类的引用赋给一个子类变量,必须进行类型转换,这样才能够通过运行时检查。

9.只能在继承层次内进行类型转换,在将超类转换成为子类前,应该使用instanceof进行检查。

10.不会产生异常,只是返回false。之所以这样处理是因为null没有引用任何对象,当然也不会引用C类型的对象。

11.如果自下而上在类的继承层次结构中上移,位于上层的类更具有通用性,甚至可能更加抽象。

12.为了提高程序的清晰度,包含一个或多个抽象方法的类本身必须被声明为抽的。

13.除了抽象方法之外,抽象类还可以包含具体数据和具体方法。

14.抽象类方法充当着占位的角色,他们的具体实现在子类中。

15.扩展抽象类可以有两种方法:一种是在子类中定义部分抽象方法或抽象方法也不定义,这样就必须将子类也标记为抽象类;另一种是定义全部的抽象方法,使其不抽象。

16.类即使不含抽象方法,也可以将类声明为抽象类。抽象类不能实例化。但可以定义一个抽象类的对象变量。

17.private仅对本类可见,public对所有类可见,protected对本包和所有子类可见,默认修饰符对本包可见。

实例程序:

测试类

public class test001 {
	public static void main(String[] arge)
	{
		Person[] people = new Person[2];

		people[0] = new Employee("worker",1000,1987,1,1);
		people[1] = new Student("boy","计算机");

		for(Person p : people)
		{
			System.out.println(p.getName() + "," + p.getDescription());
		}
	}
}

人类

public abstract class Person {
	public abstract String getDescription();
	private String name;

	public Person(String n)
	{
		name = n;
	}

	public String getName()
	{
		return name;
	}
}

雇员类

import java.util.*;

public class Employee extends Person {
	private double salary;
	private Date hireDay;

	public Employee(String n,double s,int year,int month,int day)
	{
		super(n);
		salary = s;
		GregorianCalendar gr = new GregorianCalendar(year,month - 1,day);
		hireDay = gr.getTime();
	}

	public double getSalary()
	{
		return salary;
	}

	public Date getHireDay()
	{
		return hireDay;
	}

	public String getDescription()
	{
		return String.format("一名工资为 %.2f的工人",salary);
	}

	public void raise(double p)
	{
		double raise = salary * p / 100;
		salary += raise;
	}
}

学生类

public class Student extends Person {
	private String major;

	public Student(String n,String m)
	{
		super(n);
		major = m;
	}

	public String getDescription()
	{
		return "一名" + major +"专业的学生";
	}
}
时间: 2024-10-14 12:13:00

我的java学习笔记(8)关于多态的相关文章

Java学习笔记六:多态

多态通过分离“做什么”和“怎么做”,从另一个角度讲接口和实现分离开来.多态的作用是消除类型之间的耦合关系,多态方法调用允许一种类型表现出与其他相似类型之间的区别,只要他们都是从同一个基类导出而来的. 1.方法参数中传入基类,可以使子类方便调用 class Instrument { public void play(Note n) { System.out.println("Instrument.play()"); } } class Wind extends Instrument {

Java学习笔记--继承和多态(上)

1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toString()类 6.发现多态性和动态绑定 7.描述解释为什么向下转型是必须的 8.在Object类中探索equals 方法 9.存储,取回,实现ArrayLis的对象 10.使用ArrayList类实现Stack 11.超类中使用数据和方法,protected 12.使用final模块来禁止类和方法的覆盖

Java学习笔记--继承和多态(下)

1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toString()类 6.发现多态性和动态绑定 7.描述解释为什么向下转型是必须的 8.在Object类中探索equals 方法 9.存储,取回,实现ArrayList的对象 10.使用ArrayList类实现Stack 11.超类中使用数据和方法,protected 12.使用final模块来禁止类和方法的覆

java学习笔记之面向对象多态

面向对象三大特性之多态 一.多态的概念 多态是继封装,继承之后,面向对象的三大特性. 现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的张三同学既是学生也是人,即出现两种形态. java作为面向对象的语言,同样可以描述一个事物的多种形态,java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口) 变量赋值. 父类的引用变量指向子类对象.多态的前提需要有继承关系或者是实现关系,否则没法完成多态.在使用

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记(三)java中的修饰符abstract、static与final

一.四种访问级别的访问范围 访问级别 访问修饰符 同类 同包 子类 不同的包 公开 public 受保护 protected 默认 没有访问修饰符 私有的 private 二.使用abstract修饰符需要遵守的语法规则 1.抽象类中可以没有抽象方法,但是包含抽象方法的类必须定义为抽象类,即用abstract修饰: 2.抽象类跟抽象方法不能被final修饰符修饰: 3.抽象类中可以有非抽象方法,因为继承抽象类的子类必须重写父类中所有的抽象方法,因此抽象类中不能有抽象构造方法和抽象静态方法: 4.

Java 学习笔记(2015.7.13~17)

Java 学习笔记(2015.7.13~17) Java this关键字 表示本类中的属性,调用本类中的方法 class Person {        private String name;         private int age;         public Person(String name, int age) {         this.name = name;//调用本类中的属性         this.age = age;//同上} //get&set方法:    

非专业码农 JAVA学习笔记 3 抽象、封装和类(2)

(2).静态域-放在内存公共存储单元,不放在特定的对象,用static修饰 (续上一篇<非专业码农 JAVA学习笔记 3 抽象.封装和类(1)>...) (3).静态初始器-由static引导的一对大括号括起来的语句组,作用跟构造函数相似 (4).最终域-final引导的,值在整个过程都不发生改变的 5.方法 (1)方法的定义:修饰词1 修饰词2…返回值类型 方法名(参数) throw[异常列表] 这里个人经验就是注意定义了返回值的方法,要在方法体里面增加return 该类型变量:此外遇到if

Java学习笔记_26_泛型概述

                                                               泛型概述 在Java中存入容器中的对象再取出时需要转换类型,因为对象加入容器会被转换成Object类型,而取出时要转换成实际类型.但向  下类型转换都 是存在潜在危险的,因此应该尽量避免它们.  Java的泛型: 所谓泛型就是在定义(类.方法.形参.成员变量等等)的时候,指 定它们为通用类型,也就是数据类型可以是任意类型. 泛型为提高大型程序的类型安全和维护带来了很大的潜