面向对象-多态、多态中成员的特点
2018-03-09 14:19
246 查看
多态:可以理解为事物存在的多钟体现形态。
1.多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2.多态的前提
必须使类与类之间有关系,要么继承,要么实现。
通常还有一个前提:存在覆盖。
3.多态的好处
多态的出现大大的提高程序的扩展性。
多态的弊端
提高了扩展性,但是只能使用父类的引用,访问父类中的成员。
4.多态的应用
5.多态的出现代码中的特点(多态使用的注意事项)
//Fu f = new Zi();
多态中成员函数(非静态->具有重写特性)的特点:
编译时期:参阅引用型变量所属的类中,是否有调用的方法。如果有,编译通过,否则,编译失败。
运行时期:参阅对象所属的类中,是否有调用的方法。(覆盖操作)
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
面试:
//Fu f = new Zi(); Fu{num=1};
f.num; -> 1//
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
代码:
abstract class Animal
{
abstract void eat();
}
class Cat extends Animal
{
public void eat() {
System.out.println("chiyu");
}
}
class code
{
public static void main(String[] args)
{
Animal a = new Cat();//类型提升,往上转型
a.eat();
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用,转成子类类型,向下转型。
Cat c=(Cat)a;
c.catchMouse();
/*我们能转换的是父类应用指向了自己的子类对象,该应用可以被提升,也可以被强制转换。
多态自始至终都是子类对象在做着变化。*/
// Animal a = new Animal();//千万不要出现这样的操作,就是将父类对象转成子类类型。
// Cat c = (Cat)a;
function(new Cat());
}
public static void function(Animal a)//Animal a = new Cat();
{
a.eat();
}
}多态的应用:abstract class Animal
{
abstract void sleep();
public void eat() {
System.out.println("dx");
}
}
class Cat extends Animal
{
public void sleep() {
System.out.println("dz");
}
}
class Dog extends Animal
{
public void sleep() {
System.out.println("zz");
}
}
class Fun//扩展性
{
public void dosoming(Animal a)
{
a.sleep();
a.eat();
}
}
class code
{
public static void main(String[] args)
{
Fun f = new Fun();
f.dosoming(new Cat());
f.dosoming(new Dog());
}
}
1.多态的体现
父类的引用指向了自己的子类对象。
父类的引用也可以接收自己的子类对象。
2.多态的前提
必须使类与类之间有关系,要么继承,要么实现。
通常还有一个前提:存在覆盖。
3.多态的好处
多态的出现大大的提高程序的扩展性。
多态的弊端
提高了扩展性,但是只能使用父类的引用,访问父类中的成员。
4.多态的应用
5.多态的出现代码中的特点(多态使用的注意事项)
//Fu f = new Zi();
多态中成员函数(非静态->具有重写特性)的特点:
编译时期:参阅引用型变量所属的类中,是否有调用的方法。如果有,编译通过,否则,编译失败。
运行时期:参阅对象所属的类中,是否有调用的方法。(覆盖操作)
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
面试:
//Fu f = new Zi(); Fu{num=1};
f.num; -> 1//
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边。
代码:
abstract class Animal
{
abstract void eat();
}
class Cat extends Animal
{
public void eat() {
System.out.println("chiyu");
}
}
class code
{
public static void main(String[] args)
{
Animal a = new Cat();//类型提升,往上转型
a.eat();
//如果想要调用猫的特有方法时,如何操作?
//强制将父类的引用,转成子类类型,向下转型。
Cat c=(Cat)a;
c.catchMouse();
/*我们能转换的是父类应用指向了自己的子类对象,该应用可以被提升,也可以被强制转换。
多态自始至终都是子类对象在做着变化。*/
// Animal a = new Animal();//千万不要出现这样的操作,就是将父类对象转成子类类型。
// Cat c = (Cat)a;
function(new Cat());
}
public static void function(Animal a)//Animal a = new Cat();
{
a.eat();
}
}多态的应用:abstract class Animal
{
abstract void sleep();
public void eat() {
System.out.println("dx");
}
}
class Cat extends Animal
{
public void sleep() {
System.out.println("dz");
}
}
class Dog extends Animal
{
public void sleep() {
System.out.println("zz");
}
}
class Fun//扩展性
{
public void dosoming(Animal a)
{
a.sleep();
a.eat();
}
}
class code
{
public static void main(String[] args)
{
Fun f = new Fun();
f.dosoming(new Cat());
f.dosoming(new Dog());
}
}
相关文章推荐
- 黑马程序员--03.Java面向对象--08.【多态中成员的特点】
- java面向对象-多态中成员函数成员变量的特点
- 面向对象-多态、多态中成员的特点
- 面向对象_多态中的成员访问特点
- 面向对象第三个特征----多态III(特点)
- 面向对象第三个特征----多态III(特点)
- 黑马程序员-博客 (3) 面向对象一之类和对象、成员变量和局部变量、继承、封装、多态
- 面向对象第三个特征----多态III(特点)
- java学习日记_41:面向对象之抽象的引入、抽象的特点和抽象成员的特点
- 面向对象第三个特征----多态III(特点)
- JAVA进阶 面向对象程序设计——第4章 继承与多态【不同访问属性使子类在使用这些成员时不同】
- 面向对象第三个特征----多态III(特点)
- 面向对象、类与对象、成员与局部变量、封装、private、构造函数、this、static、extends、super、final、abstract、interface、多态、内部类、异常【5】
- C++之面向对象程序设计的基本特点(抽象、封装、继承、多态)
- 黑马程序员《java基础总结(四)》(面向对象特点--多态)
- java study 07day--面向对象继承中类成员中的特点
- 黑马程序员--03.Java面向对象--05.【继承】【子父类中成员的特点】【子父类中构造函数的特点】
- 面向对象第三个特征----多态III(特点)
- DELPHI面向对象支持特点--保护级类成员的应用
- 面向对象_多态的成员访问特点级转型的理解