类的多态性:成员变量与成员方法访问特点(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()+ "岁啦");
	}
}

执行结果:在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

使君杭千秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值