1.包的访问
import java.util.ArrayList;
/*
*
* 不同包之间的互相访问
* 使用类的全名
* 使用关键字import将类导入
*
*
* 注意:*代表的是通配符,代表导入了这个包下所有的类,并没有导入子包下的类
*
* 类的全名:包名.类名
*
*
*/
public class PackageDemo2 {
public static void main(String[] args) {
//相同包下的类可以直接访问,不需要做其他的操作
//PackageDemo pd = new PackageDemo();
java.util.ArrayList list = new java.util.ArrayList();
ArrayList list2 = new ArrayList();
}
}
2.权限修饰符
2.1 访问权限

2.2 总结

3.内部类
3.1 概述:
A:什么是内部类
将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类。其他类也称为外部类。
B:什么时候使用内部类
在描述事物时,若一个事物内部还包含其他可能包含的事物,比如在描述汽车时,汽车中还包含这发动机,这时发动机就可以使用内部类来描述。
3.2 成员内部类
package com.daigua14;
/*
* 成员内部类:
* 在类的成员位置,和成员变量以及成员方法所在的位置是一样的
* 在内部类当中,可以直接访问外部类的成员,包括私有成员
*/
public class InnerClassDemo1 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
Outer.Inner i = new Outer().new Inner();
i.function();
}
}
class Outer {
private int num = 10;
public void method() {
Inner i = new Inner();
i.function();
}
class Inner {
public void function() {
System.out.println(num);
}
}
}
成员内部类可以使用的修饰符:private,public,procted,final,static,abstract
package com.itheima_01;
/*
* 成员内部类的修饰符:
* 我们可以使用权限修饰符修饰成员内部类,但是如果使用私有来修饰,则无法在其他类中访问
* 我们可以使用static修饰成员内部类,不用再创建外部类的对象了
*
* 我们可以使用abstract,final修饰成员内部类
*/
public class InnerDemo2 {
public static void main(String[] args) {
//Outer2.Inner2 i;
//Outer2.Inner2 i = new Outer2.Inner2();
//i.function();
Outer2.Inner2.function();
}
}
class Outer2 {
public void method() {
Inner2 i = new Inner2();
}
static class Inner2 {
public static void function() {
System.out.println("function");
}
}
}
3.3 局部内部类
package com.daigua14;
/*
* 局部内部类
* 在方法内,出了方法之后就无法使用
*
*
*/
public class InnerClassDemo2 {
public static void main(String[] args) {
Outer1 o = new Outer1();
o.method();
}
}
class Outer1 {
public void method() {
int num = 10;
class Inner {
public void function() {
System.out.println("function");
}
}
Inner i = new Inner();
i.function();
}
public void test() {
// Inner i = new Inner();
// System.out.println(num);
}
}
3.4 匿名内部类
package com.daigua14;
/*
* 匿名内部类:
* 可以把匿名内部类看成是一个没有名字的局部内部类
* 定义在方法当中
* 必须在定义匿名内部类的时候创建他的对象
* 格式:
* new 类/接口(){
* 如果是创建了继承这个类的子类对象,我们可以重写父类的方法
* 如果是创建了实现这个接口的子类对象,我们必须要实现该接口的所有方法
* };
* 原理:而是创建了继承这个类的子类对象或者是创建了实现这个接口的子类对象
*
*/
public class InnerDemo4 {
public static void main(String[] args) {
Outer o = new Outer();
o.method();
}
}
interface Inner {
public void function();
}
class Outer {
public void method() {
/*new Inner() {
@Override
public void function() {
System.out.println("function");
}
}.function();;*/
Inner i = new Inner() {
@Override
public void function() {
System.out.println("function");
}
};
i.function();
i.function();
}
}
3.5 匿名内部类作为参数传递
package com.itheima_04;
public interface Animal {
public abstract void eat();
}
package com.itheima_04;
public class Cat implements Animal {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
package com.itheima_04;
public class Dog implements Animal {
@Override
public void eat() {
System.out.println("狗啃骨头");
}
}
package com.itheima_04;
/*
* 匿名内部类的应用场景:
* 作为参数进行传递
*
*
*/
public class InnerDemo5 {
public static void main(String[] args) {
//method(new Dog());
//method(new Cat());
method(
new Animal() {
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
);
}
public static void method(Animal a) {
a.eat();
}
}