子类能不能继承父类里protected的内部类

qq_20587861 2017-11-23 10:36:13
如果可以,如何得到该内部类的对象
如题,在java编程思想第十章练习6里遇到的问题
...全文
1541 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_41139185 2019-12-18
  • 打赏
  • 举报
回复
看了好久,一开始我也以为是继承的内部类,后来发现,练习6里面说的是继承外部类,而不是外部类的内部类,要继承内部类好像即便是用protected也必须在一个包里,没太了解内部类继承初始化的顺序...包外继承内部类的话,构造器参数传个外部类,外部类.super居然是去调外部类对应内部类的构造器...感觉内部类的初衷就不是给类外继承用的...
jiawenhe123 2019-12-03
  • 打赏
  • 举报
回复
具名内部类都可以看做是外部类的字段: 静态内部类不同于普通的内部类的特点是可以不初始化外部类对象的情况下实例化,就好像是一个静态字段一样。 但是命名空间需要使用外部类名.内部类名:
class SubClass extends OutClass.InnerClass {

}
要继承就这样写即可。
jianyuzhitian 2019-12-02
  • 打赏
  • 举报
回复
java默认无参构造器并不默认是public的,而是默认跟类的访问权限修饰词一致。你这个练习中内部类是protected,所以默认无参构造器也是protected,只有在同一个包下或这个内部类的子类才有访问权限,而另一个包下的外部类的子类没有访问权限
Bearox 2018-12-15
  • 打赏
  • 举报
回复
老哥,按照你的方法真的可以。 可以解释一下吗,为什么需要加一个public的构造函数? 如果不加,他不是应该有一个默认的public 构造函数吗?
石头上的叶子 2018-07-24
  • 打赏
  • 举报
回复
将你第二个包中的实现的内部类 中创建公共的构造方法

package com.sure.test6.p1;
public interface Inter {
void say(String some);
}



package com.sure.test6.p2;

import com.sure.test6.p1.Inter;
public class Outer {

protected class Impl implements Inter{
public Impl(){}
@Override
public void say(String some) {
System.out.println(some);
}
}
}



package com.sure.test6.p3;

import com.sure.test6.p1.Inter;
import com.sure.test6.p2.Outer;

public class Extend extends Outer {

public Inter getImpl(){
return this.new Impl();
}
}
你吃菜我喝汤 2018-03-22
  • 打赏
  • 举报
回复
本类 同包 子类 全局 public 是 是 是 是 protected 是 是 是 default 是 是 private 是 子类当然可以继承 protected的父类
考拉一枚 2018-03-22
  • 打赏
  • 举报
回复
引用 9 楼 nimahai_balabala 的回复:
emmmm也是碰到这题带着疑问来了,然而这个问题下面那几位答题的兄弟是不是没有去看过题目,第十章的练习6,:在第一个包中创建一个至少有一个方法的接口,在第二个包中创建一个类,其中还有一个protected的内部类实现上个接口。第三个包中继承这个类,并在一个方法中返回protected内部类的对象,返回的时候向上转型为接口。 我在尝试的时候似乎不管是静态还是非静态的子类都无法访问父类的protected内部类。Intellij一直报错,编译也一直没通过,自动纠错,就只有提示修改内部类的权限修饰符。不知道楼主有没有解决,有解决的话可以讨论一下
按你的定义编写代码 并没有出现你所说的问题
沁海棠 2018-03-21
  • 打赏
  • 举报
回复
内部类,只是写到了一个类里面而已,看一下编译后的文件发现是生成两个类文件,内部类要通过外部类才能找到,
沁海棠 2018-03-21
  • 打赏
  • 举报
回复
public class CCC extends BBB{ public AAA CCC() { BBB.In i = new BBB.In(); return (AAA)i; } }
nimahai_balabala 2018-01-30
  • 打赏
  • 举报
回复
emmmm也是碰到这题带着疑问来了,然而这个问题下面那几位答题的兄弟是不是没有去看过题目,第十章的练习6,:在第一个包中创建一个至少有一个方法的接口,在第二个包中创建一个类,其中还有一个protected的内部类实现上个接口。第三个包中继承这个类,并在一个方法中返回protected内部类的对象,返回的时候向上转型为接口。
我在尝试的时候似乎不管是静态还是非静态的子类都无法访问父类的protected内部类。Intellij一直报错,编译也一直没通过,自动纠错,就只有提示修改内部类的权限修饰符。不知道楼主有没有解决,有解决的话可以讨论一下
  • 打赏
  • 举报
回复
权限范围有个图的,你自己看看不就明天了。。。。。。。
lianjiaoku 2017-12-02
  • 打赏
  • 举报
回复
天之上有什么 2017-11-24
  • 打赏
  • 举报
回复
用protected访问修饰的类,可以被当前包中的类和其他包中的子类所访问
  • 打赏
  • 举报
回复
Son son = new Son(); Parent.Inner aa = son.new Inner(); aa.方法(); 不在一个包里也没问题的,,,在子类里导入父类就可以的。
AlanMTuring 2017-11-24
  • 打赏
  • 举报
回复
不太明白问题是什么
qq_20587861 2017-11-24
  • 打赏
  • 举报
回复
还有一点忘记讲了,子类和父类不在同一个包
自由自在_Yu 2017-11-24
  • 打赏
  • 举报
回复
class OutClass{
	
	protected static class InnerClass{
		public static void method(){
			System.out.println("----InnerClass method----");
		}
	}
}

public class Test extends OutClass{
	public static void main(String[] args) {
		Test.InnerClass.method();
	}
}
不清不慎 2017-11-24
  • 打赏
  • 举报
回复
protected的范围是本类,本包,继承类,只要在这个范围类都可以继承。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧