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 面向对象内部类的更多相关文章

  1. JAVA面向对象-----内部类的概述

    JAVA面向对象-–内部类的概述s 将类定义在另一个类的内部则成为内部类.其实就是类定义的位置发生了变化. 在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为 ...

  2. java面向对象--内部类

    将一个类定义在另一个类里面,里面的那个类称为内部类,与属性.方法等一样视作外部类的成员.内部类提供了更好的封装,不允许同包中的其他类访问该内部类. 内部类作为外部类的成员,同样可以被4个访问限定符修饰 ...

  3. Java面向对象㈢ -- 内部类

    内部类必须要依赖于继承或实现一个接口.内部类可以实现Java多继承,内部类访问外表类的局部变量或参数时,则该局部变量或参数必须被final修饰.内部类不能包含有static的变量和方法,原因是因为内部 ...

  4. Java面向对象 Object类 内部类

     Java面向对象 Object类    内部类 知识概要:                 一:Object类                 二:内部类 匿名内部类的写法 1.Object O ...

  5. 如何讲清楚 Java 面向对象的问题与知识?(类与对象,封装,继承,多态,接口,内部类...)

    写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...

  6. Java学习笔记:04面向对象-内部类_访问修饰符_final

    04面向对象-内部类/访问修饰符/final 1.static的介绍 static:关键字,静态的 static的作用是用来修饰类中的成员 2.访问一个类中的某一个成员变量 方法一: _1.创建对象 ...

  7. Java面向对象程序设计--接口和内部类

    1.接口的定义: In the Java programming language, an interface is not a class but          staff[0] =       ...

  8. Java面向对象的多态

    Java中多态的概念是面向对象中除封装和继承外非常重要的知识点,也是Java面向对象三大特性最后一个特性 多态其实就是指对象存在的多种形态,多态分为引用多态和方法多态 引用多态的含义就是:父类的引用可 ...

  9. Java面向对象的封装

    封装是Java面向对象的三大特性之一,通常我们是通过包管理机制同时对类进行封装,隐藏其内部实现细节,通常开发中不允许直接操作类中的成员属性,所以属性一般设置为私有权限private,类中一般会给出一些 ...

随机推荐

  1. LVS+keepalived 实战

    安装依赖: yum -y install wget libnl* popt* gcc.x86_64 gcc-c++.x86_64 gcc-objc++.x86_64 kernel-devel.x86_ ...

  2. Linux常用基本命令:三剑客命令之-awk内置函数用法

    awk的内置函数大致可以分类为算数函数.字符串函数.时间函数.其他函数等 算数函数 最常用的算数函数有rand函数.srand函数.int函数. 可以使用rand函数生成随机数,但是使用rand函数时 ...

  3. 解析<button>和<input type="button"> 的区别

    一.定义和用法 <button> 标签定义的是一个按钮. 在 button 元素内部,可以放置文本或图像.这是<button>与使用 input 元素创建的按钮的不同之处. 二 ...

  4. 9种网页Flash焦点图和jQuery焦点图幻灯片

    jQuery图标放大轮播焦点图 Flash图片焦点图滑动切换 Flash右侧焦点图上下滑动切换 左右按钮滑动切换的网页幻灯片 双图同时滑动切换的焦点图 含有上下按钮的双图同时滑动切换的焦点图 常见的j ...

  5. vue和webpack打包 项目相对路径修改

    一般vue使用webpack打包是整个工程的根目录,但是很多情况下都是把vue打包后的文件在某子目录下. 修改: 1,打开index.js assetsPublicPath:'/' 改为: asset ...

  6. CSS--居中方式总结

    一.水平居中方法 1.行内元素.字体的水平居中 1.对于行内元素(display值为inline或inline-block都可以)或者字体:父元素添加css规则:text-align:center; ...

  7. loadrunner 运行场景-Controller及Load Generators宿主主机优化

    运行场景-Controller及Load Generators宿主主机优化 by:授客 QQ:1033553122 1.  Load Generator宿主主机优化设置 win7以下:进入“控制面板” ...

  8. Java并发编程(二)同步

    在多线程的应用中,两个或者两个以上的线程需要共享对同一个数据的存取.如果两个线程存取相同的对象,并且每一个线程都调用了修改该对象的方法,这种情况通常成为竞争条件.  竞争条件最容易理解的例子就是:比如 ...

  9. Expo大作战(四十)--expo sdk api之 Calendar,Constants

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  10. IntelliJ IDEA 2017 永久注册方法

    https://blog.csdn.net/weixin_39913200/article/details/80859897 在安装的idea下面的bin目录下面有2个文件 : 一个是idea64.e ...