9、多态剖析
来源:互联网 发布:js的find方法 编辑:程序博客网 时间:2024/06/06 15:01
1、当两个方法形成重写关系时,可以在子类方法中通过super.run()形式调用父类的run()方法,其中super.run()不必放在第一行语句,因此此时父类对象已经构造完毕,先调用父类的run()方法还是先调用子类run()方法是根据程序的逻辑决定的。(子类调用父类中的方法,可以使用super.方法名(参数)的格式。)
2、在定义一个类时,如果没有显示指定该类的父类,那么该类就会继承于java.lang.object类(jdk提供的一个类,object类是java中所有类的直接或者间接父类)。object类是最顶层的类,根类。
3、多态(polymorphism):我们说子类就是父类(玫瑰是花,男人是人),因此多态的意思就是:父类型的引用可以指向子类型的对象。
4、父类型的引用可以指向子类型的对象。
5、 当使用多态方式调用方法时,首先检查父类中是否有调用的方法,如果没有则编译错误;如果有,再去调用子类的该方法。
如:parent p = new Child(); 当使用多态方式调用方法时,首先检查父类中是否有sing()方法,如果没有则编译错误;如果有,再去调用子类的sing()方法。
编译的出错信息:
6、关于强制类型转换, 一共有两种类型的强制类型转换:
A) 向上类型转换(upcast):比如说将Cat类型转换为animal类型,即将子类型转换为父类型。对于向上类型转换,不需要显式指定。
B) 向下类型转换(downcast):比如将animal类型转换为cat类型。即将父类型转换为子类型,对于向下类型转换,必须要显式指定(必须要使用强制类型转换)。不是什么父类型都可以向下转换的,要看这个父类型变量具体指向的是什么对象。
为什么要使用向下类型转换?为了使用子类中特有的方法和属性,按照继承,父类中有的子类中一定有,子类中可以增加新的和修改原有的,而如果使用父类型指向一个子类型对象,就不能使用子类中的新增方法等。
public
class
PolyTest3
{
public
static
void
main(String[] args)
{
/*
Animal animal = new Cat();
Animal animal2 = new Animal();
animal2 =animal;
//animal和animal2都是Animal类型变量,同种变量类型可以相互赋值
//animal2由原来的指向Animal对象改为指向Cat对象
animal2.run();
//打印结果为cat is run
*/
/*
Animal animal = new Cat();
Animal animal2 = new Animal();
animal =animal2;
//animal和animal2都是Animal类型变量,同种变量类型可以相互赋值
//animal由原来的指向Cat对象改为指向Animal对象
animal.run();
//打印结果为animal is run
*/
Cat cat = new Cat();
Animal animal = cat;
//animal和cat是不同类型的类型变量,将Cat类型变量赋值给Animal类型变量
//animal指向Cat对象,父类型变量指向子类型对象
animal.run();
//打印结果为子类型方法结果:cat is run
/*
Animal animal = new Animal();
Cat cat = (Cat)animal;
//编译通过,运行错误,
*/
//向上类型转换
Cat cat =
new
Cat();
Animal animal = (Animal)cat;
//这里(Animal)cat是向上类型转换,可以不显示转换直接写cat
animal.run();
//向下类型转换
Animal a =
new
Cat();
//Cat cat =a;这样写不行,这样写就是说父类就是子类
Cat c =(Cat)a;
c.run();
}
}
class
Animal
{
public
void
run()
{
System.out.println(
"animal is run"
);
}
}
class
dog
extends
Animal
{
public
void
run()
{
System.out.println(
"dog is run"
);
}
}
class
Cat
extends
Animal
{
public
void
run()
{
System.out.println(
"cat is run"
);
}
}
在参数传递中使用的非常多,如定义一个方法
public void run(Animal animal)
{
}
传递参数时
Cat cat = new Cat();
.run(cat);
- 9、多态剖析
- 9、多态剖析
- 剖析多态
- 剖析C#的多态
- 剖析Delphi中的多态
- 剖析Delphi中的多态
- 剖析Delphi中的多态
- C++多态深度剖析
- C++ 多态深度剖析
- C++多态深度剖析
- C++多态深度剖析
- java多态理解剖析
- 深入剖析C#的多态(摘)
- 深入剖析C#的多态
- 深入剖析C#的多态
- 深入剖析C#的多态
- 剖析Delphi中的多态(转)
- [转]深入剖析C#的多态
- 如何获得下拉数据集下拉框的显示值
- UML 文章收集
- Posix多线程编程学习笔记(一)
- JQuery 中的ajax的方法 ($.ajax,$.post.$get,$.jgetJSON)
- 用properties写的一个程序运行次数计数的程序代码,超过次数提示注册。
- 9、多态剖析
- JVM工作原理
- word中增加目录
- Sql日期格式化
- Mysql 中使用DATE_FORMAT函数按月、周统计数据
- 不错的网址
- java基础学习笔记(二)String、正则
- 精通正则表达式读书笔记(一)
- VS中的路径宏 vc++中OutDir、ProjectDir、SolutionDir各种路径