java 面向对象内部类
1.内部类概念:将一个类定义在另一个类的内部,该类就称为内部类
类中定义的内部类特点
1) 内部类作为外部类的成员,可以直接访问外部类的成员
(包括 private 成员),反之则不行。
2) 内部类做为外部类成员,可声明为 private、默认、protected
或 public。
3) 内部类成员只有在内部类的范围之内是有效的。
4) 用内部类定义在外部类中不可访问的属性。这样就在外部
类中实现了比外部类的 private 还要小的访问权限。
public class Face { //脸
private String shape="瓜子脸";//私有属性
public class Nose{//鼻子
private String shape="高鼻梁";
public void breath(){
//当内部类与外部类有相同的属性时,在访问外部类的属性时,需要加上外部类的 类名.this.属性
System.out.println("鼻子长在了"+Face.this.shape+"形状的脸上");
System.out.println(shape);
System.out.println("有使用鼻子呼吸!");
}
}
}
内部类的优缺点:
优点:内部类可以直接访问外部类的私有属性
缺点:破坏了类的结构
2.内部类分类
1) 成员内部类
内部类相当于外部类的成员
2) 静态内部类
public class Outer {
private static String name="张三";
/**静态内部类 ,(1)不允许访问外部类的非static属性
* (2)如果内部类中的方法为static方法,那么内部类也必须为静态的*/
static class Inner{
public void show(){
System.out.println(name);
}
}
static class Inner2{
public static void show(){
}
}
}
public class TestStaticInner {
public static void main(String[] args) {
//创建内部类的对象 new 外部类类名.内部类类名();
Outer.Inner i=new Outer.Inner();
i.show();
//访问的是静态内部类中的静态方法
Outer.Inner2.show();
}
}
3) 方法中的内部类
只能在方法中使用,相当于方法中的局部变量
public class Outer {
//Outer的成员方法
public void show(){
int a=10;//方法中的局部变量
//内部类相当于show方法中的局部变量,使用范围只能在show方法中
class Inner{
public void fun(){
System.out.println("a="+a);
}
}
//创建内部类的对象
new Inner().fun();
}
}
4) 匿名内部类 (存在继承或实现关系)
a) 可以实现一个接口,或者继承一个父类
b) 只能实现一个接口
c) 适合创建那种只需要一次使用的类,不能重复使用。
比较常见的是在图形界面编程 GUI 里用得到。
public abstract class Father {//父类
public abstract void dream();//伟 大的梦想
}
class Son extends Father{ //子类是有名称的,子类的名称叫son
@Override
public void dream() {
}
}
class Test{
public static void main(String[] args) {
//父类引用指向子类对象
Father f=new Son(); //在名字的子类
/**没有名字的子类*/
Father f2=new Father()
{ //没有名称的类
@Override
public void dream() {
System.out.println("努力实现父亲的伟 大梦想,当兵光荣");
}
};
f2.dream();
}
}
java 面向对象内部类的更多相关文章
- JAVA面向对象-----内部类的概述
JAVA面向对象-–内部类的概述s 将类定义在另一个类的内部则成为内部类.其实就是类定义的位置发生了变化. 在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为 ...
- java面向对象--内部类
将一个类定义在另一个类里面,里面的那个类称为内部类,与属性.方法等一样视作外部类的成员.内部类提供了更好的封装,不允许同包中的其他类访问该内部类. 内部类作为外部类的成员,同样可以被4个访问限定符修饰 ...
- Java面向对象㈢ -- 内部类
内部类必须要依赖于继承或实现一个接口.内部类可以实现Java多继承,内部类访问外表类的局部变量或参数时,则该局部变量或参数必须被final修饰.内部类不能包含有static的变量和方法,原因是因为内部 ...
- Java面向对象 Object类 内部类
Java面向对象 Object类 内部类 知识概要: 一:Object类 二:内部类 匿名内部类的写法 1.Object O ...
- 如何讲清楚 Java 面向对象的问题与知识?(类与对象,封装,继承,多态,接口,内部类...)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
- Java学习笔记:04面向对象-内部类_访问修饰符_final
04面向对象-内部类/访问修饰符/final 1.static的介绍 static:关键字,静态的 static的作用是用来修饰类中的成员 2.访问一个类中的某一个成员变量 方法一: _1.创建对象 ...
- Java面向对象程序设计--接口和内部类
1.接口的定义: In the Java programming language, an interface is not a class but staff[0] = ...
- Java面向对象的多态
Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...
- Java面向对象的封装
封装是Java面向对象的三大特性之一,通常我们是通过包管理机制同时对类进行封装,隐藏其内部实现细节,通常开发中不允许直接操作类中的成员属性,所以属性一般设置为私有权限private,类中一般会给出一些 ...
随机推荐
- 设计模式之适配器模式(Adapter)(6)
简介 在实际的开发过程中,由于应用环境的变化(例如使用语言的变化),我们需要的实现在新的环境中没有现存对象可以满足,但是其他环境却存在这样现存的对象.那么如果将“将现存的对象”在新的环境中进行调用呢? ...
- 列表中文字太多 溢出使用省略号css方法
我们经常会遇到文字太多,而为了不打破原有布局,需要将多出文字用省略号代替,实现以下效果: 文字太太太太多多多啦...... 这个不多. html:这是个列表.ul/ol都行. <ul> & ...
- windows使用笔记-google-chrome下载地址
我的邮箱地址:zytrenren@163.com欢迎大家交流学习纠错! google-chrome下载地址:https://www.google.cn/intl/zh-CN/chrome/
- jquery之行自加自减
实现目标:点击按钮复制本行,修改后重新插入到本行后面,点击复制出的行可删除本行 代码如下: <!DOCTYPE html> <html lang="en"> ...
- python之初始面向对象
1. 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 2. 类. 对象 类: 就是图纸. 创建对象的第一步. 先画图 ...
- [VUE ERROR] Duplicate keys detected: 'tab-user'. This may cause an update error.
错误消息如图: 如果你看到此错误消息,则说明 v-for 指令的 key值 重复了,只需修改你的 key值 让其不会重复即可.
- IDEA项目搭建十二——站点用户登录会话实现
一.简介 前两天写了一篇用户登录会话设计的脑图,这次就把这个引入到项目中实现,总体来说需要几步先罗列一下: 1.需要一个Cookie工具类用于读写cookie 2.需要一个Cache工具类用于在服务端 ...
- plsql如何导出查询结果
mark一下,感谢大牛分享:http://www.cnblogs.com/Marydon20170307/p/8385674.html
- getWidth()和getMeasuredWidth()的区别
结论:getMeasuredWidth()获取的是view原始的大小,也就是这个view在XML文件中配置或者是代码中设置的大小.getWidth()获取的是这个view最终显示的大小,这个大小有可能 ...
- synchronized的锁问题
有一个类A,提供了三个方法.分别是静态同步方法,非静态同步方法,含有静态代码块的方法 1 class A{ 2 public static synchronized void print1(){ 3 ...