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,类中一般会给出一些 ...
随机推荐
- jQuery动画切换引擎插件Velocity.js
Velocity.js 官网 Velocity.js实现弹出式相框 慕课网 极棒的jquery动画切换引擎插件Velocity.js jQ库 (function($){ // 普通调用 /*$('#d ...
- Python全栈学习_day009知识点
今日大纲: . 函数的初识 . 函数的返回值 . 函数的参数 1. 函数的初识 统计字符串s的总个数(不能用len) s='fkahfkahofijalkfkadhfkjadhf' count = f ...
- git 命令小总结
下载代码 git clone http://admin@192.168.0.208:7990/scm/klvchen/tale.git 设置用默认户名和密码登录,注意 URI 前面不允许有 http, ...
- 1788:Pell数列
1788:Pell数列 查看 提交 统计 提问 总时间限制: 3000ms 内存限制: 65536kB 描述 Pell数列a1, a2, a3, ...的定义是这样的,a1 = 1, a2 = 2 ...
- 【读书笔记】iOS-优化iOS Web应用
一,代码优化: 代码优化是任何优化技术的第一步,因为归根结底网页上的一切都是构建在代码之上的.优秀的代码可以节省宽带,减少渲染延迟,以及提高页面的可读性和长远的可维护性.下面列出了一些在Web应用中编 ...
- css中元素border属性的构成以及配合属性值transparent可得到一些特殊形状1.0
css中我们经常使用到元素的border属性和属性值transparent,可能好多人还不太了解border的构成以及配合transparent的一些效果: 1.border的构成如下所示: ht ...
- CentOS7系列--安装Chrome浏览器
CentOS7系列--安装Chrome浏览器 1. 创建yum源文件 [root@server20 ~]# cd /etc/yum.repos.d/ [root@server20 yum.repos. ...
- 【转】64位系统下无法使用libpam-mysql的md5
转自:http://superwf.dyndns.info/?p=331 Aug 23 09:05:57 wfoffice saslauthd[7235]: pam_mysql – non-crypt ...
- gson解析json
json介绍 JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本 ...
- (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
访问某页面时,出现了这个异常: java.lang.IllegalArgumentException: Wildcard string cannot be null or empty. Make su ...