昨日复习:
1)什么是多态:事物的多种形态
2)多态的好处是: 提高代码的拓展性
3)多态的弊端是: 不能使用子类特有功能
4)多态的前提条件是: 必须有继承或者实现关系, 必须有方法重写, 必须有父类引用指向子类对象
5)定义和实现接口的关键字是: interface implements
知识点:
1)创建普通内部类对象格式
2)内部类的访问特点
3)私有成员内部类访问
4)静态成员内部类
5)局部内部类,位置和访问方式
6)内名内部内,前提和格式
一.多态的介绍
1.内部类概述:
内部类就是在一个类中定义一个类。举例:在一个A类的内部定义一个B类, B类就被称为内部类。
2.内部类的访问特点:
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象
3.创建内部类对象的格式:
外部类名.内部类名 对象名 = new 外部类对象().new 内部类对象();
--案例范例------------------------------
public class Test1Inner {
public static void main(String[] args) {
Outer.Inner i = new Outer().new Inner();
System.out.println(i.num);
i.show();
}
}
class Outer {
private int a = 10;
class Inner {
int num = 10;
public void show(){
System.out.println("Inner..show");
// 内部类, 访问外部类成员, 可以直接访问, 包括私有
System.out.println(a);
}
}
}
---------------------------------------------
二.成员内部类
1.按照内部类在类中定义的位置不同,可以分为如下两种形式
在类的成员位置:成员内部类
在类的局部位置:局部内部类
2.成员内部类,外界如何创建对象使用呢?
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
范例:Outer.Inner oi = new Outer().new Inner();
3.成员内部类也属于(成员),既然是成员就可以被一些修饰符所修饰
private
私有成员内部类访问:在自己所在的外部类中创建对象访问。
static
静态成员内部类访问格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
静态成员内部类中的静态方法:外部类名.内部类名.方法名();
--私有成员内部类访问,案例范例-----------
public class Test2Innerclass {
/*私有成员内部类演示*/
public static void main(String[] args) {
// 不能像普通的成员内部类直接方法
// Outer.Inner oi = new Outer().new Inner();
Outer o = new Outer();
o.method();
}
}
class Outer {
private class Inner {
public void show(){
System.out.println("inner..show");
}
}
public void method(){
Inner i = new Inner();
i.show();
}
}
----------------------------------------
--静态成员内部类,案例范例---------------
public class Test3Innerclass {
/* 静态成员内部类演示*/
public static void main(String[] args) {
Outer.Inner oi = new Outer.Inner();
oi.show();
Outer.Inner.method();
}
}
class Outer {
static class Inner {
public void show(){
System.out.println("inner..show");
}
public static void method(){
System.out.println("inner..method");
}
}
}
----------------------------------------
三.局部内部类
1.编写位置: 方法中
2.访问方式: 只能在方法中, 创建对象并访问
3.局部内部类:可以直接访问外部类的成员,也可以访问方法内的局部变量
--局部内部类,案例范例---------------
public class Test4Innerclass {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
class Outer {
int a = 10;
public void method(){
int b = 20;
class Inner {
public void show(){
System.out.println("show...");
System.out.println(a);
System.out.println(b);
}
}
Inner i = new Inner();
i.show();
}
}
------------------------------------
四.局部内部类
1.概述:匿名内部类本质上是一个特殊的局部内部类(定义在方法内部)
2.前提:需要存在一个接口或类
3.格式:
new 类名或者接口名() { 重写方法; };
4.理解:匿名内部类是将(继承 \ 实现)(方法重写)(创建对象)三个步骤,放在了一步进行
--匿名内部类,案例范例---------------
public class Test5Innerclass {
public static void main(String[] args) {
// 匿名内部类的理解: 将继承\实现, 方法重写, 创建对象, 放在了一步进行.
new Inter() {
@Override
public void show() {System.out.println("我是匿名内部类中的show方法");}
}.show();
// 情况: 接口中存在多个方法
Inter2 i = new Inter2() {
@Override
public void show1() { System.out.println("show1...");}
@Override
public void show2() { System.out.println("show2..."); }
};
i.show1();
i.show2();
}
}
interface Inter { void show();}
interface Inter2 { void show1(); void show2();}
------------------------------------
--匿名内部类应用--------------------
public class TestSwimming {
public static void main(String[] args) {
Swimming swimming = new Swimming() {
@Override
public void swim() { System.out.println("铁汁, 我们去游泳吧"); }
};
goSwimming(swimming);
}
/** 使用接口的方法 */
public static void goSwimming(Swimming swimming){
swimming.swim();
}
}
/* 游泳接口 */
interface Swimming { void swim(); }
------------------------------------
五.更多内容请查看下面
http://www.gxcode.top/code