java中匿名内部类可以有构造方法吗,若可以如何编写???

yoyocomeonbabygo 2018-10-30 12:16:52
java中匿名内部类可以有构造方法吗,若可以如何编写???
...全文
2356 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
杀猪剑客 2018-12-03
  • 打赏
  • 举报
回复
引用 18 楼 qq_39936465 的回复:

1.我觉得你说的和写的都是有问题的,我没看出来你是如何重写父类构造器的。用代码块去实现??? 那还是重写吗?
2.我觉得类名首字母得大写?
3.人家问java中匿名内部类可以有构造方法吗,若可以如何编写?你觉得有嘛?
4.人家是新手,搞那些似懂非懂得东西,容易误导人家。[/quote]


void std(int i){
this.i=i;
}


这里用隐式方法重写了 父类的无参构造。添加了新参数i,因为匿名内部类的只有一次性效果,在程序内部无法使用,但是在匿名类内部可以用非静态初始块就可以进行新参数的传递。

匿名内部类 不可以写显示式构造方法,用的是隐式构造方法而且只能重写无参的父类构造,因为没有名字所以无法进行参数传递,难道无参构造就不算构造了么?我只是说可以有,不是说一定要有,看上去确实很鸡肋实际中完全用不上,我只是说明可能性。[/quote]
我有疑问:1.什么是构造方法?构造方法又叫构造函数是面向对象的语言中初始化作用的方法!它没有返回类型!!!!作用就是初始化你定义的类的对象以及对象的属性!
2.什么是显示构造?我的理解就是除了自带的无参构造器,其它都是显示构造。
3.什么是隐式构造? 无非就是自带的无参构造器,但是没有显示出来。
void std(int i){
               this.i=i;
           } 像这样的方法是构造方法吗?首先他有返回值!只是他的返回值是void 。这点我不是很理解。
玉蟾风雪花 2018-11-30
  • 打赏
  • 举报
回复
匿名内部类应该是没有本类的构造函数,因为匿名内部类是没有名字的,没办法去写和调用本类的构造函数,但可以调用父类的构造函数也可以写构造代码块!
阿米米米 2018-11-30
  • 打赏
  • 举报
回复
构造器作用是什么呢?在匿名内部类中写构造器有什么意义?
kobe_am4:00 2021-10-24
  • 举报
回复
@阿米米米 初始化属性
qq_39936465 2018-11-29
  • 打赏
  • 举报
回复
[/quote] 1.我觉得你说的和写的都是有问题的,我没看出来你是如何重写父类构造器的。用代码块去实现??? 那还是重写吗? 2.我觉得类名首字母得大写? 3.人家问java中匿名内部类可以有构造方法吗,若可以如何编写?你觉得有嘛? 4.人家是新手,搞那些似懂非懂得东西,容易误导人家。[/quote]

void std(int i){
               this.i=i;
           }
这里用隐式方法重写了 父类的无参构造。添加了新参数i,因为匿名内部类的只有一次性效果,在程序内部无法使用,但是在匿名类内部可以用非静态初始块就可以进行新参数的传递。 匿名内部类 不可以写显示式构造方法,用的是隐式构造方法而且只能重写无参的父类构造,因为没有名字所以无法进行参数传递,难道无参构造就不算构造了么?我只是说可以有,不是说一定要有,看上去确实很鸡肋实际中完全用不上,我只是说明可能性。
杀猪剑客 2018-11-28
  • 打赏
  • 举报
回复
引用 16 楼 qq_39936465 的回复:
[quote=引用 15 楼 扫地僧 的回复:]

你这边父类是抽象类,如果父类是个接口呢??还可以重写嘛?


匿名内部类都是带new的你说要不要重写?

接口为什么不可以重写?接口本身就是抽象方法的集合,是极端形式的抽象类,然后冠以接口的名称,内部方法可以省略 抽象这个修饰词
[/quote]
1.我觉得你说的和写的都是有问题的,我没看出来你是如何重写父类构造器的。用代码块去实现??? 那还是重写吗?
2.我觉得类名首字母得大写?
3.人家问java中匿名内部类可以有构造方法吗,若可以如何编写?你觉得有嘛?
4.人家是新手,搞那些似懂非懂得东西,容易误导人家。
qq_39936465 2018-11-27
  • 打赏
  • 举报
回复
引用 15 楼 扫地僧 的回复:
你这边父类是抽象类,如果父类是个接口呢??还可以重写嘛?
匿名内部类都是带new的你说要不要重写? 接口为什么不可以重写?接口本身就是抽象方法的集合,是极端形式的抽象类,然后冠以接口的名称,内部方法可以省略 抽象这个修饰词
杀猪剑客 2018-11-27
  • 打赏
  • 举报
回复
引用 14 楼 qq_39936465 的回复:
不好意思,还漏了一个非静态初始块,程序奉上



public class test9 {

public static void main(String args[]) {

std s=new std() {
private int i;
void std(int i){
this.i=i;
}
public void show(){
System.out.println("子构造----");
}
public void print() {
System.out.println("子构造-------");
}
public void show2() {
System.out.println("新构造法-----");
}
{
System.out.println("子构造法~~~~~");
show2();
std(2);
System.out.println(i);
}

};
s.show();
s.print();
}
}
abstract class std{
public std() {
System.out.println("父构造------");
}
public abstract void print();
public void show(){
System.out.println("父构造----");
}
}


运行结果

父构造------
子构造法~~~~~
新构造法-----
2
子构造----
子构造-------


前面有点说错,新构造法还是可以在 匿名类中的非静态初始块中实现的,父类的显式构造重写为隐式构造,也可以在非静态初始块中实现。

你这边父类是抽象类,如果父类是个接口呢??还可以重写嘛?
qq_39936465 2018-11-23
  • 打赏
  • 举报
回复
不好意思,还漏了一个非静态初始块,程序奉上


public class test9 {
	
	public static void main(String args[]) {

		std s=new std() {
		   private int i;
		   void std(int i){
			   this.i=i;
		   }
		   public void show(){
			   System.out.println("子构造----");
		   }
		   public void print() {
			   System.out.println("子构造-------");
		   }	
		   public void show2() {
			   System.out.println("新构造法-----");
		   }
		   {
			   System.out.println("子构造法~~~~~");
			   show2();
			   std(2);
			   System.out.println(i);
		   }
		   
		};
		s.show();
		s.print();
	}	
}
abstract class std{
    public std() {
    	System.out.println("父构造------");
	}
	public abstract void print();
	public void show(){
		   System.out.println("父构造----");
	}   
}
运行结果 父构造------ 子构造法~~~~~ 新构造法----- 2 子构造---- 子构造------- 前面有点说错,新构造法还是可以在 匿名类中的非静态初始块中实现的,父类的显式构造重写为隐式构造,也可以在非静态初始块中实现。
qq_39936465 2018-11-23
  • 打赏
  • 举报
回复
先上段程序


public class test {
	
	public static void main(String args[]) {

		std s=new std() {
		   public void show(){
			   System.out.println("子构造----");
		   }
		   void print() {
			   System.out.println("子构造-------");
		   }
                   public void show2() {
			   System.out.println("新构造法-----");
		   }	  
		};
		s.show();
		s.print();
	}	
}
abstract class std{
    public std() {
    	System.out.println("父构造------");
	}
	public abstract void print();
	public void show(){
		   System.out.println("父构造----");
	}   
}
运行结果 父构造------ 子构造---- 子构造------- 接下来说说自己的理解: public std() {System.out.println("父构造------")}这个构造是显示构造,就在类初始化时会被调用 public void show(){System.out.println("子构造----");} 这个构造方法为隐式构造,需要用s.show();来调用 public abstract void print();这个是抽象方法,如果匿名类用的父类是抽象类,其中的抽象方法一定要重写,不然实例化会报错。 public void show2() ;这个是新添加的方法,但是因为是匿名类,本身没用名字,虽然可以编译但是无法调用,所以没有意义。
杀猪剑客 2018-11-20
  • 打赏
  • 举报
回复
引用 9 楼 qq_39936465 的回复:
[quote=引用 8 楼 snowday88 的回复:]
匿名内部类,言外之意就是没有名字得类。。试想一下,一个没有名字得类,如何写他得构造方法??多思考,不要问这些没有营养得问题。


匿名内部类虽然没有名字,但是它继承了父类,可以重写父类的构造方法,必须重写父类的抽象方法为可以实现的方法。[/quote]能否给个Demo,演示下你说的这个?
sotondolphin 2018-11-08
  • 打赏
  • 举报
回复
引用 9 楼 qq_39936465 的回复:
[quote=引用 8 楼 snowday88 的回复:] 匿名内部类,言外之意就是没有名字得类。。试想一下,一个没有名字得类,如何写他得构造方法??多思考,不要问这些没有营养得问题。
匿名内部类虽然没有名字,但是它继承了父类,可以重写父类的构造方法,必须重写父类的抽象方法为可以实现的方法。[/quote] 一般使用匿名内部类是用来实现接口,或者实现父类的一些抽象方法,没有必要重写父类的构造方法。
sotondolphin 2018-11-08
  • 打赏
  • 举报
回复
匿名内部类不会有构造方法,因为它没有名字。构造方法的名字必须和类的名字一样。匿名内部类只是实例化它的抽象父类或者接口
qq_39936465 2018-11-06
  • 打赏
  • 举报
回复
引用 8 楼 snowday88 的回复:
匿名内部类,言外之意就是没有名字得类。。试想一下,一个没有名字得类,如何写他得构造方法??多思考,不要问这些没有营养得问题。


匿名内部类虽然没有名字,但是它继承了父类,可以重写父类的构造方法,必须重写父类的抽象方法为可以实现的方法。
杀猪剑客 2018-11-05
  • 打赏
  • 举报
回复
匿名内部类,言外之意就是没有名字得类。。试想一下,一个没有名字得类,如何写他得构造方法??多思考,不要问这些没有营养得问题。
Flying-PigBaby 2018-10-31
  • 打赏
  • 举报
回复
不能有构造方法,不管是有参还是无参构造方法都是用来提供类的实例化的,匿名内部类只能在你定义时就使用,即表示其本身就是一个实例化对象,也只能使用这一次,因为没有名字,你在别的地方无法指定来实例化对象,那么有没有构造方法都是没有意义的。
刘乐钢铁 2018-10-31
  • 打赏
  • 举报
回复
如果想在匿名内部类里有构造器,就不能是接口的实现类。父类只能是抽象类或者普通类。因为想拥有构造器方法的内部类的父类必须能实例初始化。
qq_39936465 2018-10-30
  • 打赏
  • 举报
回复
匿名类其实就是子类,怎么写子类就怎么写匿名类,不过匿名类只能用一次,下次想要调用还要重写一遍代码,如果要多次使用的话,还是编写一个子类。
十八道胡同 2018-10-30
  • 打赏
  • 举报
回复
qybao 2018-10-30
  • 打赏
  • 举报
回复
又出bug了,回复内容完全对不上 没有 但是你可以通过代码块{}来达到相同的结果
qybao 2018-10-30
  • 打赏
  • 举报
回复
又出bug了,回复内容完全对不上 没有 但是你可以通过代码块{}来达到相同的结果
加载更多回复(1)

62,614

社区成员

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

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