小编sya*_*yam的帖子

为什么我们不能在子类中分配较弱的权限

我有一个类,它有一个方法,默认情况下访问说明符是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)

java inheritance

12
推荐指数
3
解决办法
1万
查看次数

为什么java不支持动态变量调度

如果标题错误,请原谅.有两个类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)

请告诉我这种行为的原因.提前致谢....

java inheritance

4
推荐指数
1
解决办法
595
查看次数

select()ed socket上的socket recv与etimedout失败

我正在编写一个服务器 - 客户端程序,其中包含以下代码片段以接收数据.

    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之后也能完全接收数据.

sockets linux

3
推荐指数
1
解决办法
5195
查看次数

标签 统计

inheritance ×2

java ×2

linux ×1

sockets ×1