Java面向对象_内部类
概念:内部类就是类的内部定义的类
成员内部类格式如下:class Outer{
class Inner{}
}
编译上述代码会产生两个文件:Outer.class和Outer$Inner.class
在外部创建内部类对象
内部类除了可以在外部类中产生实例化对象,也可以在外部类的外部来实例化。所以内部类的访问:通过"外部类.内部类"的形式表示
Outer out=new Outer();//产生外部类实例
Outer.Inner in=null;//声明内部类对象
in=out.new Inner();//实例化内部类对象
public class Practice14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer o=new Outer();
o.print();
//直接在外部使用内部类,不推荐使用
Outer.Inner in=o.new Inner("在外部使用内部类");
in.print();
}
}
class Outer{
public void print(){
//在外部类实例化内部类,并调用方法
Inner i=new Inner("成员内部类");
i.print();
}
class Inner{
private String name;
public Inner(String name){
this.name=name;
}
public void print(){
System.out.println(name);
}
}
}
方法内部类格式如下:class Outer{
public void doSomething(){
class Inner{
public void seeOuter(){}
}
}
}
注意:1.方法内部类只能在定义该内部类的方法内实例化,不可以在此方法外对其实例化
2.方法内部类对象不能使用该内部类所在方法的非final局部变量
public class Practice14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer o=new Outer();
o.print1();
}
}
class Outer{
public void print1(){
final int x=10;//方法内部类对象不能使用该内部类所在方法的非final局部变量
//在方法内创建内部类
class Inner1{
public void print(){
System.out.println("我是方法内部类"+x);
}
}
Inner1 i=new Inner1();//只能在定义该内部类的方法内实例化
i.print();
}
}
静态内部类:在一个类内部定义一个静态内部类:静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它。静态嵌套类仅能访问外部类的静态成员和方法。
class Outer{
static class Inner{}
class Test{
public static void main(String[] args){
Outer.Inner n=new Outer.Inner();
}
}
public class Practice14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//在外部直接使用静态内部类(创建静态内部类对象不需要依赖外部类的对象)
//静态内部类在之后的安卓编程中经常使用(重点)
Outer.Inner o=new Outer.Inner();
o.print();
}
}
class Outer{
static class Inner{
public void print(){
System.out.println("静态");
}
}
}
匿名内部类:匿名内部类就是没有名字的内部类。有三种情况:继承式的匿名内部类;接口市的匿名内部类;参数式的匿名内部类;
在使用匿名内部类时,记住以下原则:
1.不能有构造方法,只能有一个实例
2.不能定义任何静态成员、静态方法
3.不能是public,protected,private,static
4.一定是在new的后面,用其隐含实现一个接口或实现一个类
5.匿名内部类为局部的,所以局部内部类的所有限制都对其生效
public class Practice14 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Boy b=new Boy();
b.print();
b.print2(new Child(){
public void desc(){
System.out.println("参数式的匿名内部类");
}
});
}
}
interface Child{
public void desc();
}
class Boy{
public void print(){
Child C=new Child(){
public void desc(){
System.out.println("接口市的匿名内部类");
}
};
C.desc();
}
public void print2(Child ch){
ch.desc();
}
}
定义内部类时优先考虑静态内部类,可以防止内存溢出。
Java面向对象_内部类的更多相关文章
- 黑马程序员_Java面向对象_内部类
6.面向对象_内部类 1.内部类定义 内部类:将一个类定义在另一个类里面,对里面那个类就称为内部类.(内置类.嵌套类)内部类可以被私有修饰. 2.内部类访问规则 访问特点: 内部类可以直接访问外部类中 ...
- Java核心基础第5篇-Java面向对象_类和对象
Java面向对象之类和对象 一.面向对象概述 Java是完全的面向对象编程(Object Oriented Programming),简称OOP. 面向对象编程的思维方式更加符合大家的日常生活,因为我 ...
- Java面向对象_继承——基本概念以及管理化妆品实例分析
一.继承的基本概念: 1.继承是面向对象三大特征之一 2.被继承的类成为父类(超类),继承父类的类成为子类(派生类) 3.继承是指一个对象直接使用另一个对象的属性和方法 4.通过继承可以实现代码重用 ...
- Java面向对象15——内部类
内部类(了解) 成员内部类 package oop.demon01.demon10; public class Outer { private int id = 10; pu ...
- Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)
From: http://www.itzhai.com/java-based-notebook-a-static-inner-class-within-a-class-member-within-th ...
- java面向对象_接口
java接口 interface,是一个抽象类型,是抽象方法的集合,接口通常以interface来声明.一个类通过继承接口的方式,从而来继承接口的抽象方法. 接口并不是类,编写接口的方式和类很相似,但 ...
- JAVA面向对象-----局部内部类
局部内部类 局部内部类概述:包含在外部类的函数中的内部类称之为局部内部类. 访问:可以在包含局部内部类的方法中直接创建局部内部类的对象调用局部内部类的成员. 注意:局部内部类只能访问所在函数的fana ...
- LY.JAVA面向对象编程.内部类
2018-07-18 10:14:48 /* 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类. 举例:在类A中定义了一个类B,类B就是内部类. 内部的访问特点: A:内部类可以直接访问外部 ...
- Java面向对象_抽象类、接口
一.抽象类 概 念:很多具有相同特征和行为的对象可以抽象为一个类:很多具有相同特征和行为的类可以抽象为一个抽象类 关键字:abstract 规 则:1.抽象类可以没有抽象方法,有抽象方法的类必 ...
随机推荐
- Python脚本开头两行:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用
转于:https://www.crifan.com/python_head_meaning_for_usr_bin_python_coding_utf-8/ 出处:在路上 一.基本功能 1)#!/us ...
- 【转】js中select的基本操作
判断select选项中 是否存在Value="paraValue"的Item // 1.判断select选项中 是否存在Value="paraValue"的I ...
- <正则吃饺子> :关于mybatis中使用的问题(一)
在公司项目开始之前,根据springboot .mybatis.Swagger2 整合了一个demo,在测试时候,遇到的问题,简单记录.之前在使用mybatis时候,没有注意到这一点. 1.错误:Th ...
- BIOS MCSDK 2.0 User Guide - Acronyms and Definitions
BIOS MCSDK 2.0 User Guide - Texas Instruments Wiki Acronyms and Definitions The following acronyms a ...
- python fabric的安装与使用
背景:fabric主要执行远程的shell命令,包括文件的上传.下载,以及提示用户输入等辅助其它功能. 测试系统:ubuntu16 要求:python //系统有自带,ubuntu16 通常自带pyt ...
- 汉字转为unicode
在word中输入“立项申请阶段”,将光标移到每字之后时按下组合键Alt+X. 立项申请阶段 7ACB 9879 7533 8BF7 9636 6BB5 \u7ACB\u9879\u7533\ ...
- 并行fp-growth图解(mahout)
FP-growth Apriori算法的一个主要瓶颈在于,为了获得较长的频繁模式,需要生成大量的候选短频繁模式.FP-Growth算法是针对这个瓶颈提出来的全新的一种算法模式.目前,在数据挖掘领域,A ...
- JavaScript学习系列5 ---ES6中的var, let 和const
我们都知道JavaScript中的var,在本系列的 JavaScript学习系列2一JavaScript中的变量作用域 中,我们详细阐述了var声明的变量的作用域 文章中提到,JavaScript中 ...
- 【QtAV】QtAV中的工厂模式
QtAV中的各个模块大量使用的工厂模式,下面对其实现进行介绍. 工厂模式的使用 以 VideoRenderer 类为例子,他含有下面3个工厂模式相关的方法,Register方法用于给一个产品<c ...
- VR中运动控制器的传送系统
创建一个VRPawn 新建一个BluePrint,父类选择Pawn,我们命名为VRPawn,打开它. 添加一个Scene命名为CameraRoot 在CameraRoot节点下添加一个Camera 在 ...