自家用的java小总结(2.4):类的知识的查漏补缺(内部类)


1

2

    

首先,这是一篇自己用的文章,不对读者承担任何责任,所以,要带着批判的眼光来看下面的文章

 

  


1

发现了,得加上输出结果,怕自己出错,~~

 

这篇文章说了些什么?

这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多..

注意

1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一些知识的而已,如果不复制(最好自己打上)代码运行一次,可能会被我的在代码的注释所误解, 欢迎提意见和评论~~~你的意见和评论是我更新的动力(促进我更快滴读完编程思想)

本文适合读者

   适合有一定的编程基础的人,因为我的代码可能出错,建议零基础的人找本书先看看,或者一定要复制我的代码运行一下,否则,后果将不堪设想  <( ̄▽ ̄)> 哇哈哈…因为我也只是新手
  

再一次提醒

下面的注释只是我个人的总结.
我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确)
,但是注释的语序凌乱各种天花百草不说了.!!!!绝非书本原话!!!!所以要最好还是把我的代码复制下来,运行一遍,也可以把我的注释删掉,或者提示我说应该怎么说,应该怎么说.

再一次感谢

1 感谢你可以抽出你的时间来进行下面阅读,思考的碰撞是智慧产生的前提.谢谢你的阅读和你愿意复制我的代码并阅读我那千奇百怪无比丑的注释来进行思考的碰撞!~!~

正文:

内部类对于外部类来说,像是定义的关系
外部类对于内部类而言,像是继承的关系

1.内部类的对象的创建

通常都需要依赖外部类对象来使用1.定义一个外部类对象p第一个p.new 内部类对
package test.java;

public class Parcel2{
	class Contents{
		private int i=11;
		public int value(){
			return i;
		}
	}
	class Destination{
		private String label;
		Destination(String whereTo){
			label = whereTo;
		}
		String readLabel(){
			return label;
		}
	}
	//又创建两个方法来得到对象,实现多态
	public Destination to (String s){
		return new Destination(s);
	}

	public Contents contents(){
		return new Contents();
	}

	public void ship(String dest){
		Contents c = contents();
		Destination d = to(dest);
		System.out.println(d.readLabel());
	}

	public static void main(String[] args) {
		Parcel2  p = new Parcel2();
		p.ship("Tasmania");
		Parcel2 q = new Parcel2();

		//可以两种这样的回归
		Parcel2.Contents c = q.contents();
		Parcel2.Destination d= q.to("Borneo");
	}  
}

3.   .this和.new的介绍咯

package test.java;

public class DotThis{
	void f(){
		System.out.println("DonThis.f()");
	}

	public class Inner{
		public DotThis outer(){
			return DotThis.this;  //这个this 是innner的this
		}
		public void haveATry(){
//			this.f();
			DotThis.Inner.this.f();
		}
		void f(){
			System.out.println("Inner This");
		}
	}
	public Inner inner(){
		return new Inner();
	}

	public static void main(String[] args) {
		DotThis dt = new DotThis();
		//注
//		DotThis.Inner dt = new DotThis().new Inner();//这样才可以
		DotThis.Inner dti = dt.inner();	//返回内部类的对象
										//给dti的inner
													//在这里也可以证明 内部类必须依赖一个外部类的对象来创建 对象
										//但这就奇怪了
										//如果这样的话,‘

										//新建一个内部类的对象->
		dti.outer().f();		//但是这个通过Inner的返回发现调用的是外部类的F()方法,也就是说,外部类的
		dti.haveATry();						//这里证明了DTI是内部类的对象
	}
}
DonThis.f()
Inner This

4.在方法里定义内部类

package test.java;
interface Destination{

}
public class Parcel5{
	public Destination destination(String s){  //方法里定义内部类
			class PDestination implements Destination{   //这个类是方法的一部分,而不是类的一部分
					private String label;					//在方法外不能访问 PD类
					private PDestination(String whereTo){
						label = whereTo;
					}
					public String readLabel(){
						return label;
					}
				}
			return new PDestination(s);  //返回内部类对象
	}

	public static void main(String[] args) {
		Parcel5 p= new Parcel5();
		Destination d = p.destination("ABC");   //也能被赋值
	}

}

5.if里面的内部类

package test;
interface Destination{

}
public class
Parcel6{
	private void internalTracking(boolean b){
		if ( b)
		{
					class TrackingSlip
					{
											private String id;

											TrackingSlip(String s){
												id =s;
											}

											String getSlip(){
												return id;
										}
						}
			TrackingSlip ts = new TrackingSlip("Slip");
			String s = ts.getSlip();
			System.out.println(s);
			//在if里面定义  和使用内部类完全 大丈夫~~~  表明 内部类 也只是一个变量类型(特殊的)
		}
//		TrackingSlip ts = new TrackingSlip("x");在 if 外 Tracking类型就无法解析了
	}

	public void track(){
		internalTracking(true);
	}

	public static void main(String[] args) {
		Parcel6 p = new Parcel6();
		p.track();
	}
}
Slip

6.匿名内部类

new 父类接口()
{
    //注意在这里会覆盖父类的方法.
}//分号不能丢
;
package test;
public class Parcel8{
	public Wrapping warpping (int x){		//这里设置一个参数,传过来当构造器的从参数
		return new Wrapping(x)		//如果高早起里有参数,就这样来
		{
			public int value()
			{
				return super.value()*47;  //匿名内部类只能写同名方法,来进行局部覆盖,匿名内部类方法的调用
//													必须依赖一个类,也必须依赖一个  返回该类的对象的方法
			}
		};
	}
	public static void main(String[] args) {
		Parcel8 p  = new Parcel8();
		Wrapping w = p.warpping(10);		//这里返回了明显值得是匿名内部类的对象

		System.out.println(w.value());
	}
}
class Wrapping{
	private int i;
	public Wrapping (int x){
		i  =x;
	}
	public int value(){
		return i;
	}
}
470

7.内部类里面的赋值的数字必须final

package test.java;

public class Parcel9{
//	public Destination destination (final String dest){
	public Destination destination ( String dest){
			return new Destination()
			{
					private String label = dest;		//在内部类赋值的的时候,一定要将赋值的参数变成终态
					public String readLabel()
					{
						return label;
					}
			};
	}
	public static void main(String[] args) {
		Parcel9 p = new Parcel9();
		Destination d = p.destination("ABC");
	}
}

class Destination{
	private String label;
	Destination ()
	{

	}
}

8.在内部类里面使用方法

new 父类()
{
  //注意这里像是一个新类那样,不能调用方法.
    而调用方法就
   {
     //初始化域.
    }
};
package test.java;

abstract class  Base{
	public Base(int i){
		System.out.println("Base constroct , i =" +i);

	}
	public abstract void f();
}
public class AnnoymousConstructor{
		public static Base getBase(int i)
		{
			return
			new Base(i)
			{
						//首先会new一下构造函数
				{
				System.out.println("inside instatnce initializer");	//在main {} static{}里头才能调用方法- -~~~晕菜了
				}
				public void f()
				{
					System.out.println("In anoymous f()");
				}
				//没有实现f()方法会报错, 因为是抽象的方法

			};
		}

		public static void main(String[] args) {
			Base base = getBase(47);
			base.f();
		}
}

8.匿名内部类实现工厂方法

package test.java;

interface Service{
	void method1();
	void method2();
}

interface ServiceFactory{
	Service getService();
}
 class Implementation1 implements Service{		//声明为abstract class的时候,就不会产生奇葩行为
//	privat/e Implemention1{}
//	public void method1();
//	public vo
	 private Implementation1(){}
	 public void method1()
	 {
		 System.out.println("Implements method");
	 }
	 public void method2()
	 {
		 System.out.println("Implements method2");
	 }
	 //static方法
	 public static  ServiceFactory factory =
			 new ServiceFactory()
	 			{
		 			public Service getService()
		 			{
		 				return new Implementation1();
		 			}
	 			};
}

 class Implementation2 implements Service{
	 private  Implementation2(){}
	 public void method1()
	 {
		 System.out.println("Implementation2 method1");
	 }
	 public void method2()
	 {
		 System.out.println("Implementation2 method2");
	 }

	 //static  方法
	 public static  ServiceFactory factory =
			 new ServiceFactory()
	 {
		 public Service getService()
		 {
			 return new Implementation2();
		 }
	 };
 }

 public class Factories{
	 public static void serviceConsumer(ServiceFactory fact)
	 {
		 Service s = fact.getService();
		 s.method1();
		 s.method2();
	 }

	 public static void main(String[] args) {
		 	//为了让别人不轻易滴制造类的对象,  运用 static来返回对象 ,匿名内部类,不用再创建类的对象的调用
		serviceConsumer(Implementation1.factory);
		serviceConsumer(Implementation2.factory);

	}
 }

9.在接口中可以定义类的里面.

package test.java;
public interface ClassInIterface
{
	void howdy();
	class Test implements ClassInIterface
	{
		public void howdy()
		{
			System.out.println("howdy!");
		}
		public static void main(String[] args) {
			new Test().howdy();   //因为接口都是自动提升为 public 和static的,  变量添加为final ,
														//这样的话证明了接口里面应该是可以定义类,和实现类,但是不可以写明方法体
		}
	}
}

自家用的java小总结(2.4):类的知识的查漏补缺(内部类),布布扣,bubuko.com

时间: 2025-01-02 11:20:01

自家用的java小总结(2.4):类的知识的查漏补缺(内部类)的相关文章

近来的java小总结(2.1):类的知识的查漏补缺

首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一些知

近来的java小总结(2.2):类的知识的查漏补缺

1 首先,我是一名新手,所以,要带着批判的眼光来看下面的文章   这篇文章说了些什么? 这文章是我近来8.6号来在编程思想上打的代码,从0~200页的源码接近到在这里,下文正是总结这0~200页的的知识,涉及到接口,内部类.初始化,数值计算的一些细节.此文章不会一下子写完,可能隔一天可能再补下来.因为代码确实有点多.. 注意 1 我的注释不一定正确(不过各小标题和代码一定是正确的,因为是书本上的原话,但是注释不一定正确),如果你确信我的内容的话,你可能会损失很大,因为我只是个菜鸟,我只是来补救一

查漏补缺——java多态

---恢复内容开始--- 刚学完java,开始了查漏补缺阶段阶段,为了巩固自己的知识和为别人提供一些微末的帮助决定开通博客,求各位大牛们指出我的不足,不要吝惜言语,也希望我的总结可以对别人有帮助,对自己对他人负责. 开始正文:术语多态:可以定义为“有多种形态”,多态引用是一个一个在不同时刻可以指向不同类型对象的引用变量.通过多态引用可以调用不同的具体的方法. 类方法的多态性的实现有两种方式: 1:方法重载:可以声明多个同名但是参数不同(个数.类型和顺序)的方法.注意呵呵重载方法只能声明在一个类里

java知识查漏补缺

一.重写(override)和重载(overload)的区别 二者除了名字相似,其实没什么联系 范围不同:重写发生在同一个类的不同方法之间.重载发生在父类和子类自荐. 前提: 重写要求:方法名相同,参数列表不同,对于返回值类型不要求相同. 重载要求:方法名形同,参数列表也相同.重载是实现多态的关键,注意如果父类中的方法是private类型,那么子类中对应方法不算重载,而相当于是定义了一个新方法. 二.final的用法 修饰类:该类不能被继承 修饰方法:该方法不能被重写 修饰属性:该属性初始化后不

查漏补缺(java)

一.匿名数组: Java中提供一种创建数组对象并同时赋予初始值的简化书写形式 int[] a = {1,2,5,4}; 在不创建新变量的情况下,重新初始化一个数组 int b[] = {1,2,3,4}; a = b; 简化:a = new int[]{1,2,3,4}; 详见代码: public class Main { public static void main(String[] args) { //匿名数组的定义方式new int[]{1,5,1,9} int a[] = {1,5,1

查漏补缺——java枚举(enum)

刚学完java,为了巩固自己的知识和为别人提供一些微末的帮助决定开通博客,求各位大牛们指出我的错误,也希望我的总结可以对别人有帮助. enum的全称是enumeration,是JDK1.5引入的新特性,同时”泛型“也是这一阶段,下一次总结. 1.为什么要创建枚举类型? 答:在编程过程中经常可以遇见数据稳定而且有限的一组数据,比如四季{春,夏,秋,冬}: 而当我们选择一个季节的时候只能四季四个值里选择一个,所以枚举类型是类型安全的,如果使用顶以外的值会编译出错.(例子) package based

java核心-多线程(4)-线程类基础知识

1.并发 <1>使用并发的一个重要原因是提高执行效率.由于I/O等情况阻塞,单个任务并不能充分利用CPU时间.所以在单处理器的机器上也应该使用并发. <2>为了实现并发,操作系统层面提供了.但是进程的数量和开销都有限制,并且多个进程之间的数据共享比较麻烦.另一种比较轻量的并发实现是使用线程,一个进程可以包含多个线程.线程在进程中没有数量限制, 数据共享相对简单.线程的支持跟语言是有关系的.Java 语言中支持多线程. <3>Java 中的多线程是抢占式的.这意味着一个任

java小项目之:植物大战僵尸,这个僵尸有点冷!内附素材源码

Java小项目之:植物大战僵尸! <植物大战僵尸>是由PopCap Games开发的一款益智策略类单机游戏,于2009年5月5日发售,这款游戏可谓是无人不知无人不晓. 在我身边,上到40岁的大叔阿姨,下到7.8岁的小弟弟妹妹都听说和玩过这游戏.在以前智能手机还没流行的时候,各种黑网吧,游戏厅便有着玩这游戏的人.当3G技术现世,半智能手机和智能手机出现后,这款游戏更是如日中天,与愤怒的小鸟一起霸占了手机游戏市场(但当时估计都是盗版的). 相信有些使用b站的小伙伴,应该看过很多这样的视频: 这种视

Java小项目之:拼图游戏!

Java小项目之:拼图游戏!今天教大家用java做出一个拼图游戏,很适合java初学者练手.所用素材: 部分代码: package picture_mosical; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.awt.image.CropImageFilter; import java.awt.i