从头认识java-8.4 内部类与向上转型

这一章节我们来讨论一下内部类与向上转型。

跟普通的类一样,内部类也可以实现某个接口然后向上转型。

为什么?

因为这样能够更好的隐藏实现的细节,基本其他程序员使用继承来扩展接口和方法都不能访问相关实现。

package com.ray.ch03;

public class Test {
	private class Person implements CanRun {

		@Override
		public void run() {
			System.out.println("run");
		}
	}

	public Person getPerson() {
		return new Person();
	}

	public static void main(String[] args) {
		CanRun person = new Test().getPerson();
		person.run();
	}
}

interface CanRun {
	void run();
}

上面的代码通过了接口,完全隔绝了实现与接口的依赖,完全隐藏了实现的细节。

上面的代码即便我通过继承Test来扩展,但是由于Test所有的实现方法都是private的,因此,是不会有任何重写的方法。

package com.ray.ch03;

public class Test {
	private class Person implements CanRun {

		@Override
		public void run() {
			System.out.println("run");
		}
	}

	public Person getPerson() {
		return new Person();
	}

	public static void main(String[] args) {
		CanRun person = new Test().getPerson();
		person.run();
	}
}

class myTest extends Test {
	//没有任何需要重写的方法
}

interface CanRun {
	void run();
}

我们再来看一个例子:

package com.ray.ch03;

public class Test {
	private class Ship implements Destination {
		private String destination = "abc";

		@Override
		public String read() {
			return destination;
		}
	}

	public Ship destination() {
		return new Ship();
	}

	public static void main(String[] args) {
		Destination destination = new Test().destination();
		destination.read();
	}
}

class myTest extends Test {
	// 没有任何需要重写的方法
}

interface Destination {
	String read();
}

总结:这一章节主要讨论了内部类与向上转型,通过接口把实现完全隐藏起来。

这一章节就到这里,谢谢。

-----------------------------------

目录

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-28 16:16:04

从头认识java-8.4 内部类与向上转型的相关文章

Java入门记(二):向上转型与向下转型

在对Java学习的过程中,对于转型这种操作比较迷茫,特总结出了此文.例子参考了<Java编程思想>. 目录 几个同义词 向上转型与向下转型 例一:向上转型,调用指定的父类方法 例二:向上转型,动态绑定 例三:向上转型,静态绑定 例四:向下转型 转型的误区 1.运行信息(RTTI) 2.数组类型 3.Java容器 几个同义词 首先是几组同义词,由于在不同的书上使用的不同,是造成混淆的原因之一. 父类/超类/基类 子类/导出类/继承类/派生类 静态绑定/前期绑定 动态绑定/后期绑定/运行时绑定 向

Java内部类与向上转型

https://blog.csdn.net/lenfranky/article/details/84327721 这个博客写的非常好,可以学习一下 原文地址:https://www.cnblogs.com/xiaobaidashu/p/12106714.html

“全栈2019”Java第九十章:内部类可以向上或向下转型吗?

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九十章:内部类可以向上或向下转型吗? 下一章 "全栈2019"Java第九十一章:内部类具有多态特性吗? 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学

自学java 第十章内部类(二)

今天主要学习了匿名内部类. 匿名内部类是一种特殊的内部类,它没有类名,是通过继承一个类或实现一个接口来创建的,匿名内部类相当于基类的一个导出类,不过它只能通过向上转型为基类类型后才能被使用. 匿名内部类主要用于对继承方法进行实现或覆盖,它不需要添加其它的方法,即使添加也无法使用(因为它没有类名,只能通过向上转型使用,且无法向下转型,因此添加的其它方法也就无法访问). 匿名内部类如果想使用外部定义的对象,则编译器要求参数引用必须是final类型,否则会报错.如: public Destinatio

自学java 第十章内部类(一)

今天学习了一部分java中的内部类. 内部类指将一个类的定义放在另一个类的内部,那它就是一个内部类. 指明一个引用时内部类的类型可以通过"外部类名.内部类名"的写法声明,如果想返回一个内部类的对象可以通过在外部类中写一个返回该内部类的方法或者通过"外部类对象.new 内部类名()"的写法返回内部类对象. 内部类拥有对外部类所有元素的访问权,可以直接访问:而外部类则需要先创建一个内部类的对象,通过这个对象可以访问内部类中的任意成员. 内部类也可以继承类或实现接口,因此

java 深入理解内部类以及之间的调用关系

什么是内部类 内部类是指在一个外部类的内部再定义一个类.内部类作为外部类的一个成员,并且依附于外部类而存在的.内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限).内部类主要有以下几类:成员内部类.局部内部类.静态内部类.匿名内部类 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 . (2).内部类不能用普通的方式访问. (3).内部类声明成静态的,就不能随

Java向上转型和向下转型(附具体样例)

                                            Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { public void eat() { System.out.println("父类的 eating..."); } } class Bird extends Animal { @Override publ

java向上转型和向下转型

一直不太明白这个概念,于是在网上搜索了一下文章转载自:http://www.cnblogs.com/fickleness/p/3149011.html 转型是在继承的基础上而言的,继承是面向对象语言中,代码复用的一种机制,通过继承,子类可以复用父类的功能,如果父类不能满足当前子类的需求,则子类可以重写父类中的方法来加以扩展. 向上转型:子类引用的对象转换为父类类型称为向上转型.通俗地说就是是将子类对象转为父类对象.此处父类对象可以是接口 向下转型:父类引用的对象转换为子类类型称为向下转型. 前者

Java转型(向上转型和向下转型)

在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就是说我们更倾向于使用抽象概念"人".再例如,麻雀是鸟类的一种(鸟类的子类),而鸟类则是动物中的一种(动物的子类).我们现实中也经常这样说:麻雀是鸟.这两种说法实际上就是所谓的向上转型,通俗地说就是子类转型成父类.这也符合Java提倡的面向抽象编程思想.来看下面的代码: package a.