1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 类的多态性:成员变量与成员方法访问特点(C++ Java)

类的多态性:成员变量与成员方法访问特点(C++ Java)

时间:2019-06-02 06:27:51

相关推荐

类的多态性:成员变量与成员方法访问特点(C++ Java)

类的多态性:成员变量与成员方法访问特点(C++、Java)

1.C++与Java语言中类的多态格式为:

C++:父类名称 &引用对象名 = 子类名称 对象名Java:父类名称 对象名 = new 子类名称

2.对成员变量与成员方法(函数)访问特点一致,规律如下:

对于成员变量,代码编译和执行时都看父类,以父类为依据(有无及值以父类为标准);

对于成员方法,编译时以父类为依据(父类无则编译报错),执行时以子类为依据(执行子类方法),但前提是子类必须对方法进行重载,在C++中父类函数还必须为虚函数。

3.验证

C++代码(完整版):

#include<iostream>using namespace std;class Animal{public:string name="animal";int age=10; virtual void eat(){cout<<name<<"吃东西"<<endl; }virtual string getname(){return name;}virtual int getage(){return age;}int speak(){cout<<name<<"在说话"<<endl; }};class Cat:public Animal{public:string name="Tom";int age=3; void eat(){cout<<name<<"吃鱼"<<endl; }string getname(){return name;}int getage(){return age;}void work(){cout<<name<<"会抓老鼠"<<endl;}};class Dog:public Animal{public:string name="旺财";int age=5; void eat(){cout<<name<<"吃SHIT"<<endl;}void work(){cout<<name<<"会看门"<<endl; }int speak(){cout<<name<<"汪汪叫"<<endl; }};void test(){Cat cat;Animal &animal1 = cat; //多态实现 cout<<"直接访问共有成员方法:"; animal1.eat();//虚函数重载后执行子类方法 cout<<"直接访问成员变量:"<<animal1.name<<"今年"<<animal1.age<<"岁啦"<<endl;//成员变量一定返回父类的 cout<<"通过成员方法间接访问成员变量:"<<animal1.getname()<<"今年"<<animal1.getage()<<"岁啦"<<endl;//可以通过虚函数的方法间接调用子类成员变量 //animal1.work();//父类无此方法,不能访问,编译错误 cout<<"======================================================"<<endl;Dog dog;Animal &animal2 = dog;cout<<"直接访问共有(重载过)成员方法:"; animal2.eat();cout<<"直接访问成员变量:"<<animal2.name<<"今年"<<animal2.age<<"岁啦"<<endl;cout<<"通过成员方法间接访问成员变量:"<<animal2.getname()<<"今年"<<animal2.getage()<<"岁啦"<<endl;cout<<"调用共有非虚函数方法:";animal2.speak();//非虚函数重载后一定会执行父类方法 }int main(){test();return 0;}

执行结果:

Java代码(部分,可通过增添注释验证):

Animal类:

package 多态验证;public class Animal {String name = "animal";int age = 10;public void eat(){System.out.print(name + "吃东西");}public String getname(){return name;}public int getage(){return age;}}

Cat类:

package 多态验证;public class Cat extends Animal{String name = "Tom";int age = 3;public void eat(){System.out.println(name + "吃鱼");}public String getname(){return name;}public int getage(){return age;}}

主函数:

package 多态验证;public class test {public static void main(String[] args) {test0();}public static void test0(){Animal animal = new Cat();System.out.print("直接访问共有成员方法:");animal.eat();System.out.println("直接访问成员变量:" + animal.name + "今年" + animal.age+ "岁啦");System.out.println("通过成员方法间接访问成员变量:" + animal.getname() + "今年" + animal.getage()+ "岁啦");}}

执行结果:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。