其实一直有个疑惑,在Java、C#、Pyhton 中子类是否会继承父类的私有属性呢?
答案是:会继承,但是不能直接访问。如果子类想要使用父类的私有变量,可以通过方法的返回值“return”。
如下是一个Python的代码:
class Dog:
__string = "这是一个私有变量"
def a (self):
return self.__string
class siberianHusky(Dog):
def speak(self):
print("我是一只哈士奇!")
dog = siberianHusky() #dog是一个子类
print(dog.a()) #子类通过父类的方法返回私有变量!
#print(dog.__string)和print(dog.string)都会显示找不到该变量
如下是C#代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Dog {
private string name = "Tom";
private int age = 5;
public string Name
{
get { return name; }
set { this.name = name;}
}
public int getAge()
{
return age;
}
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
Console.WriteLine(dog.getAge());
}
}
}
如下是Java的代码:
class Dog{
private name = “这是一个私有变量!”
public string getName()
return name;
}
class A{
public static void main(String[] args)
{
Dog dog = new Dog();
System.out.println(dog.getName());
}
}