c#中如下:
using System;
class A
{
void qq()
{
B b=new B();
b.age=33;//失败
}
public static void Main(string[]args)
{
}
}
class B:A
{
protected int age=22;
}----------------------------------------------------------------------]
java中:
class A
{
void qq()
{
B b=new B();
b.age=33;//成功
}
public static void main(String[]args)
{
System.out.println("success");
}
}
class B extends A
{
protected int age=22;
}想请问一下,此时两种语言的运行机制.
using System;
class A
{
void qq()
{
B b=new B();
b.age=33;//失败
}
public static void Main(string[]args)
{
}
}
class B:A
{
protected int age=22;
}----------------------------------------------------------------------]
java中:
class A
{
void qq()
{
B b=new B();
b.age=33;//成功
}
public static void main(String[]args)
{
System.out.println("success");
}
}
class B extends A
{
protected int age=22;
}想请问一下,此时两种语言的运行机制.
基类根本就不应该知道派生类的存在
在基类中使用派生类,逻辑混乱!
听说java 和 c#的开发工程师是一个人啊.
LZ啊,你到底想说什么?我到现在也没找到age的声明……编译都通不过的代码,你要说明什么?C#当中的age是在子类(b)中声明的,C#编译当然通不过,
java中可以通过,希望你测试一下.谢谢你
其次,这说明Java的语法有缺陷……
不过建意不要写这样的程序,没有意义。
因此基类访问不了派生类的属性 但反之即可(除了 private )
我说你能不能嘴巴干净点
我似乎也有这个印象,两者的protected不一样
父亲有先天心脏病,儿子也有可能有。但是儿子有先天心脏病不能说父亲一定也有先天心脏病 呵呵~~
================================================================================
错了,儿子有的话父亲一定有,遗传基因Y的问题!
-----------------------------------------------
不对吧,心脏病不一定是由性染色体携带吧?
听说java 和 c#的开发工程师是一个人啊.
================
哪个说的?也不知道 “开发工程师” 指的什么?James Gosling 认识不? Anders Hejlsberg 认识不?要是把 C# 和 Dephi 摆在一起还情有可原
2.
LZ 还没有了解 java 基本知识?事实上, Java 中的 protected 修饰符成员,对于所有子类以及同一个包内的所有其他类都是可见的。我看到这里的时候,我几乎崩溃了,多么好的 Java ,不知为何 James 他们要如此设计?
我没有多少 java 的实践经验,体会不到如此设计的好处。所以,一直持“简单就是美” 的 Anders Hejlsberg 保留了 protected 在 C++ 中原始语义,并增加了 internal 修饰符,internal 表示程序集内可见,而且可以组合 protected internal
表示访问仅限于从包含类派生的当前程序集或类型。
我没有多少 java 的实践经验,体会不到如此设计的好处。
我觉得这是胡说八道,当然这需要Java的人出来解释下。
我的印象中,Java中有四种访问权限:public和private是不用说了,与C++/C#语义相同,protected是指派生类能访问,而同一个包内能访问是啥都不写,没有访问修饰符。等同于C#的internal。
至少我用java的时候protected还是指派生类能访问的。
感觉java的语法有点奇怪……
这句有误,lz的例子里父类可以访问子类的protected成员是因为在同一个包里,而由于java奇怪的语法同一个包里是可以访问protected成员的……
我觉得这是胡说八道,当然这需要Java的人出来解释下。我的印象中,Java中有四种访问权限:public和private是不用说了,与C++/C#语义相同,protected是指派生类能访问,而同一个包内能访问是啥都不写,没有访问修饰符。等同于C#的internal。=======================================================
我觉得你这种上来就居高临下的姿态需要改一改,你自己也只是一个印象,就开口一句“这是胡说八道”,实在令人有些生厌
1. C#和Java父类构造函数都可以访问子类public虚函数,这一点和C++不同...
========================
如果是虚函数的话,C++似乎也可以的吧
基类根本就不应该知道派生类的存在
在基类中使用派生类,逻辑混乱!------------------------------------------------------------------------------------
完全同意。
构造函数……C#和Java的对象构造是不同的。
即使是protected包内可访问,我也有极大的把握是包内或者派生类能访问,等同于C#的protected internal,而不是internal。看不惯某些人,实际上我都有把握直接说:肯定不是那样的,只是我没有Java环境来测试而已。
Ivony 你来一句“我觉得这是胡说八道,当然这需要Java的人出来解释下。”请问,你说的“我也有极大的把握是包内或者派生类能访问”,难道和“对于所有子类以及同一个包内的所有其他类都是可见的。”这句有很大区别吗?
是不是也是说你自己的说法,也是“胡说八道”?自己没有看仔细,就想当然,难道不是“居高临下的姿态”?
更何况,一上来,对着lz的问题,也是一句“楼主你再胡说八道这贴就水了……”,可再一看问题,只能说一句“终于看明白了,原来是指protected关键字。刚才眼花了……”来下台阶我也不是想针对你干吗,只是提醒你一下罢了,用个“居高临下的姿态”并不算侮辱你吧