我的java学习笔记(8)关于多态
2015-03-27 20:43
405 查看
关于多态
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 +"专业的学生";
}
}
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 +"专业的学生";
}
}
相关文章推荐
- java学习笔记,试用初学者,第二节,关于内存地址分配问题
- 学习Java.对于继承和多态的随堂笔记
- java核心技术学习笔记7---继承与多态
- 【Java学习笔记】关于默认值
- 关于java打印功能的最简单实现的学习笔记
- java学习笔记:关于IO转换流InputStreamReader和OutputStreamWriter
- Java 学习笔记15:关于web开发中,全局变量的一点想法
- Java与Flex学习笔记(11)----关于Struts2拦截Flex请求的问题
- 【Java学习笔记】Java中关于tostring方法的误操作
- JAVA学习笔记(三)---关于JAVA中的栈内存、堆内存
- 多态Object类equals方法学习笔记ObjectDemo.java
- 学习C#的一些笔记(关于继承与多态,static关键字)
- Java 学习笔记23:关于Java Session使用
- JAVA学习笔记之七继承和多态
- Java学习笔记-关于默认类型或访问权限的总结
- 30日学习笔记,关于java的IO系统已经Decorarot模式
- java学习笔记十二——多态
- 黑马程序员-java多态学习笔记
- Java学习笔记之六——Java类的继承和多态(1)
- Java 编程思想(第四版)学习笔记(8)多态