java基础内部类(毕向东老师)

内部类
//特点:内部类可以直接访问外部类的成员,
//外部类要访问内部类中的成员必须创建内部类的对象。
//为什么要定义内部类呢?
类是用于描述事物的,而事务中如果还有具体的事物,而且这个内部的事物在访问着所属事物
中的内容,这时这个内部的事物,也需要用到类来描述。这个类就是内部类。
为什么内部类可以直接访问外部类的成员?
因为内部类都持有一个外部类的引用。外部类名。this。

static class Inner{
int num=5;
void method(){
{
int num=6;
System.out.println("method run.."+num);
}
public void show(){
System.out.println("num+"num);
Inner in=new Inner();
in.method();
System.out.println("num="+Outer.this.num);
}
}
class Haha{
class Inner{

}
}
class InnerClassDemo{
public static void main(String[] args)
{
new Outer().show();

//直接在其他类中访问一个类的内部类。
//因为Inner是一个成员,可以先创建一个对象。
Outer.Inner in= new Outer().new Inner();
in.method();
//直接new内部类对象。//调用内部类中的非静态成员method
Outer.Inner in= new Outer.Inner();
in.method();
//访问静态内部类中的静态成员,不需要对象。
Outer.Inter.function();

}
}
}

内部类也可以定义在外部类的局部位置上。
内部类定义在局部位置上,不允许访问局部中的变量。
只能访问被final修饰的局部常量。只能访问被final修饰的局部常量。。。
class Outer
{
private int num=4;
private Object obj;
public void show(final int y){
final int x=5;
class Inner{
void method(){
System.out.println("num="+num);
System.out.println("x="+x);
}
}
obj=new Inner();

class InnerClassDemo3
{
public static void main(String[] args)
{
System.out.println("Hello World:");
}
}

方法要被对象调用,X只在show方法中有效。

//匿名内部类
凡是匿名都是简写格式。
要定义匿名内部类必须有前提,内部类需要继承或者实现一个外部的类或者借口
这时才能简写成匿名内部类的形式。

匿名内部类。其实就是 Demo的一个对象。这个对象用{}结尾内部定义了成员
也就是说是一个带有成员内容的对象,这个对象有点儿胖。

abstract class Demo
{
abstract void show();
}
class Outer
{
private int num=5;
class Inner(没名字怎么办?) extends Demo//多了这一条,可以进行简写了
{
void show()
{
System.out.println("show run..."+num);

}
}
public void method(){
Inner in=new Inner();
in.show();

//在创建对象的过程中就对其进行描述。
格式:new 父类名或接口名().成员。

//匿名内部类:其实就是 Demo的一个匿名子类对象。Demo类型的,多态的。
new Demo()
{
void show(){
System.out.println("show run..."+num);
}
}.show();(对象调用方法。)//描述在上面,毕老师说有点儿胖。

}
}
class NoInnerClassDemo
{
public static void main(String[] args){
Outer out=new Outer();
out.method();
}

}
//interface Inter
{
void show();
void show();
}
class Outer{
class Inner implements Inter
{
public void show1()
{}
public void show2()
{}
}
public void method(){
new Inter()
{public void show1()
{}
public void show2()
{}
Inner in=new Inter();
{
private int a=3;
public void show1(){}
public void show2(){}
public void show3(){}
};
in.show1();
in.show2();
in.show3();//不可以。因为这个子类对象已经升级为了Inter接口类型,只能使用Interzhong
的方法,不能使用子类的特有方法。
}
}
}
class NoInnerClassDemo2
{
public static void main(String[] args)
{
new Object()//Object obj=new object()
{
public void show(){
System.out.println("object show run......");
}
public String toString()
{
return "object tostring";
}
};
System.out.println(obj.tostring());
obj.show();

new Inner();
}
class Inner
{
}
public void function()
{
new Inner();
}
}
主函数能直接访问的都是静态的。随类的加载而可以新建对象进行访问。

时间: 2024-08-03 14:37:24

java基础内部类(毕向东老师)的相关文章

黑马程序员——java基础——内部类

 黑马程序员--java基础--内部类 ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 内部类 如果A类需要直接访问B类中的成员,而B类又需要建立A类的对象.这时,为了方便设计和访问,直接将A类定义在B类中.就可以了.A类就称为内部类.内部类可以直接访问外部类中的成员.而外部类想要访问内部类,必须要建立内部类的对象. 内部类的访问规则 1,内部类可以直接访问外部类中的成员,包括私有. 之所以可以直接访问外部类中的成员,是因为内部类中持有

JAVA基础——内部类详解

JAVA内部类详解 在我的另一篇java三大特性的封装中讲到java内部类的简单概要,这里将详细深入了解java内部类的使用和应用. 我们知道内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 匿名内部类 这里我们先将以这个分类来详细了解各个内部类的情况.然后给内部类作出总结. 一.成员内部类 内部类中最常见的就是成员内部类,也称为普通内部类.我们来看如下代码: 运行结果为: 从上面的代码中我们可以看到,成员内部类的使用方法: 1. Inner 类定义在 Outer 类的内部,相当于 O

java基础异常(毕向东老师)

异常:不正常.在运行时期发生的一些不正常情况.就是异常.异常的由来.程序运行是总会class ExceptionDemo{public static void main(String[] args){int[] arr=new int[2];System.out.println(arr[2])}} 异常情况有多钟,都需要分别描述,意味着异常情况应该会有一个体系.多一个异常具备共性不断地向上抽取,就形成了体系.异常还有一个父类.通过查阅API,发现异常体系是这样的:Throwable|--Erro

Java基础-内部类

在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 下面就先来了解一下这四种内部类的用法. 1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式: class Circle { double radius = 0; public Circle(double radius) { this.radius = radius; } class Draw

Java基础-内部类-为什么局部和匿名内部类只能访问局部final变量

先看下面这段代码: public class Test { public static void main(String[] args) { } public void test(final int b) { final int a = 10; new Thread(){ public void run() { System.out.println(a); System.out.println(b); }; }.start(); } } 这段代码会被编译成两个class文件:Test.class

Java基础-内部类-为什么成员内部类可以无条件访问外部类

在此之前,我们已经讨论过了成员内部类可以无条件访问外部类的成员,那具体究竟是如何实现的呢?下面通过反编译字节码文件看看究竟.事实上,编译器在进行编译的时候,会将成员内部类单独编译成一个字节码文件,下面是Outter.java的代码: public class Outter { private Inner inner = null; public Outter() { } public Inner getInnerInstance() { if(inner == null) inner = new

Java基础—内部类

在Java语言中,可以把一个类定义到另一个类的内部,在类里面的这个类就叫作内部类,外面的类叫作外部类.在这种情况下,这个内部类可以被看成外部类的是一个成员(与类的属性和方法类似).还有一种类被称为顶层(Top-level)类,指的是类定义代码不嵌套在其他类定义中的类. 内部类主要有以下四种:静态内部类.成员内部类.局部内部类和匿名内部类. 1.静态内部类 class outerClass{ static class innerClass{} //静态内部类 } 静态内部类是指被声明为static

黑马程序员-java基础-内部类和匿名内部类

外部类中如果含有一个接口,那个接口默认是static 内部的访问特点: A:内部类可以直接访问外部类的成员(成员变量.成员方法),包括私有成员. 之所以可以访问外部成员,是因为内部类持有外部对象的引用 B:外部类要访问内部类的成员,必须创建对象. 内部类位置 成员位置:在成员位置定义的类,被称为成员内部类. 局部位置(成员方法里面):在局部位置定义的类,被称为局部内部类. 成员内部类: 可以直接访问外部类成员 如何直接访问内部类的成员. 外部类名.内部类名 对象名 = 外部类对象.内部类对象;

2.Java基础之Runtime对象

毕向东老师Java基础学习笔记——Runtime对象 今天学习Java中的Runtime对象后,感觉这个对象对我们主要有以下几点用处. 1.使用java代码打开本地可执行文件,比如打开一个计算器. 2.打开一个程序,并用该程序打开一个支持的文件. 比如:1.打开记事本,用记事本打开*.java文件, 2.打开暴风影音播放器,用播放器打开一个本地视频. 范例代码如下: /************************************** Runtime对象: 1.该类并没有提供构造函数.