我有一个类,它有一个方法,默认情况下访问说明符是public.现在,我想在子类中扩展此类,并且我想覆盖此方法以使访问说明符为"private".编译此代码时,我收到编译错误:
"尝试分配较弱的访问权限".
有人可以向我解释在子类中分配较弱的权限有什么问题吗?
以下是导致编译错误的代码:
class Superclass
{
void foo()
{
System.out.println("Superclass.foo");
}
}
class Subclass extends Superclass
{
private void foo()
{
System.out.println("Subclass.foo");
}
}
Run Code Online (Sandbox Code Playgroud) 如果标题错误,请原谅.有两个类Test和TestChild1,其中TestChild1继承自Test.这两个类都有一个名为"a"的变量.当我尝试通过使用子类对象实例化的超类变量访问变量"a"时,它给出了在超类而不是子类中初始化的值.以下是提出疑问的代码
class Test {
public int a = 10;
}
class TestChild1 extends Test {
public int a = 20;
}
class Main {
public static void main(String args[]) {
Test test = new TestChild1();
System.out.println(test.a); // results in 10
}
}
Run Code Online (Sandbox Code Playgroud)
请告诉我这种行为的原因.提前致谢....
我正在编写一个服务器 - 客户端程序,其中包含以下代码片段以接收数据.
ret_l = select(readfds+1, &readfds, NULL, NULL ,NULL);
if(ret_l != -1)
{
if(FD_ISSET(myfd, &readfds))
{
ret_l = recv(myfd, buf, size_of_buf_array, 0);
if(ret_l == -1)
return ;
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,select()ed文件描述符上的recv应该没有失败地接收数据.但是我的代码中的recv因错误ETIMEDOUT而失败.有人请告诉我为什么会这样.还请告诉我一些解决方法,即使在ETIMEDOUT之后也能完全接收数据.