Java基础 快速学习(五)

本文深入讲解Java中的内部类、接口及模板类的概念与应用。详细介绍了内部类的创建与使用方式,探讨了内部类与外部类之间的关系,并讨论了内部匿名类的用法。此外,还介绍了接口的语法特点及其在代码设计中的重要意义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意:本系列博客是在作者已经有一年多的C++经验的基础上学习Java的个人总结,可能并不适合所有看到这篇博客的人

一、内部类

1.内部类的写法与创建

package inner_class;

public class Example
{
	//创建内部类的对像  
	public Inner create()
	{
		Inner n = new Inner();
		return n;
	}
	/*内部类*/
	public class Inner{
		public int id;
		public String name;
		
		public void test()
		{
			System.out.println("id:"+id+",name:"+name);
		}
	}
}
package inner_class;

import inner_class.Example.Inner;

public class my
{
	public static void main(String[] args)
	{
		//在Example的内部创建Inner
		Example e = new Example();
		Example.Inner nInner=e.create();
		
		//在Example的外部创建Inner   
		// 不可以像c++中那样根据类型创建  
		//Example.Inner j=new Example().Inner();
		Example.Inner jInner=e.new Inner();
	}
}
Java中内部类的写法并没什么特别的,要注意他的创建有点特别,个人理解是内部类的创建必须基于外部类对象,内部类相当于外部类中的一个类型,必须在外部类实例化后外部类才可以创建。

2.内部类与外部类的关系

内部类同时包含两个this指针,一个指向他自己,一个指向外部类。这也说明了为什么内部类必须是基于外部类创建的基础上,其次内部类不仅可以访问自己,还可以访问外部类。

package inner_class;

public class Example
{
	int number;
	String adder;
	//创建内部类的对像  
	public Inner create()
	{
		Inner n = new Inner();
		return n;
	}
	/*内部类*/
	public class Inner{
		public int id;
		public String name;
		//访问自己
		public void test()
		{
			this.id=10;
			this.name="kk";
			System.out.println("id:"+id+",name:"+name);
		}
		
		//访问外部类
		public void  test2()
		{
			number=1;   //等价Example.this.number=1;
			adder="hhhhh";
			System.out.println("number:"+number+"     adder:"+adder);
		}
	}
}

package inner_class;

import inner_class.Example.Inner;

public class my
{
	public static void main(String[] args)
	{
		//在Example的内部创建Inner
		Example e = new Example();
		Example.Inner j=e.new Inner();
		j.test();
		j.test2();
	}
}
3.内部匿名类

匿名类是内部类的简化的写法

BaseType obj=new BaseType()

{

  //类的实现     

}
4.内部类的意义

初学Java目前并没有实际感觉到内部类的意义

参考博文:http://www.cnblogs.com/chenssy/p/3388487.html

二、接口

1.接口的语法

使用关键字interface来创建一个接口,用关键字 implements 来实现这个接口 

package Interface;

public interface data
{
    int all_data(int a,int b);
}
package Interface;

public class ex implements data
{

	@Override
	public int all_data(int a,int b)
	{
		a=b+a;
		return a;
	}
	
	
}

package Interface;

public class my
{
 public static void main(String[] args)
{
	ex x = new ex();
	int c=x.all_data(1, 2);
	
	System.out.println(c);
}
}

注意:

  • 接口不能用于实例化对象。
  • 接口没有构造方法。
  • 接口中所有的方法必须是抽象方法。
  • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口不是被类继承了,而是要被类实现。
  • 接口支持多重继承
特性:

  • 接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。
  • 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误。
  • 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。
  • 在Java中,类的多重继承是不合法,但接口允许多重继承,在接口的多重继承中extends关键字只需要使用一次,在其后跟着继承接口。
2.接口的意义
个人根据经验理解哈
【1】隐藏实现的细节,有些助于更加清晰的关注业务的整体逻辑。
【2】事先设置接口可以规范命名!
【3】方便维护,比如你要改进某个功能的算法,不会牵一发而动全身。仅仅改动接口实现部分即可。
【4】从语法角度讲方便实现回调机制!毕竟Java没有函数指针。

三、模板类
略过。。。语法和C++中的模板类似(几乎是一样的),其次自己写模板的可能性不太大,Java工具包中用到的都实现了就不用自己造轮子了,直接开车就好大笑

----------------------------------------------------------------
本系列文章:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值