黑马程序员06——内部类、包
来源:互联网 发布:工资统计软件有哪些 编辑:程序博客网 时间:2024/06/02 06:04
------- android培训、java培训、期待与您交流! ----------
1:内部类
(1)把类定义在一个类的内部。(2)特点:
A:内部类可以直接使用外部类的成员,包括私有。
B:外部类要使用内部类成员,必须创建对象使用。
(3)内部类的分类:
局部内部类:定义在方法中的内部类
成员内部类:定义在类中方法外的内部类
(4)成员内部类
class Outer {
class Inner {
}
}
普通的修饰的时候:
外部类名.内部类名 变量 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();
class Outer {
static class Inner {
}
}
用静态修饰后:
外部类名.内部类名 变量 = 外部类名.内部类对象
Outer.Inner oi = new Outer.Inner();
成员内部类:
private:为了数据的安全。
static:为了方便调用。
(5)局部内部类
A:带名字的局部内部类
class Outer {
public void method() {
final int a = 10;
class Inner {
public void show() {
System.out.println("show");
System.out.println(a);
}
Inner i = new Inner();
i.show();
}
}
}
B:匿名内部类
a:没有名字的内部类。其本质是一个对象。
b:前提:存在一个抽象类或者接口。
c:格式:
new 抽象类或者接口() {
重写父类方法;
};
本质:是一个继承了类或者实现了接口的子类匿名对象。
(6)面试题:
interface Inter {
public abstract void show();
}
class Outer {
//补齐代码
}
class Test {
public static void main(String[] args) {
Outer.method().show(); //输出"林青霞"
}
}
/*匿名内部类定义:就是内部类的简化写法,没有类名直接使用其对象属于局部内部类。则一定出现在方法内。前提:内部类可以继承或实现一个外部类或者接口。格式为:new 类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)};*/class Demo7{public static void main(String[] args){/*//学习匿名内部类之前的做法Speaking speaking = new Person();speaking.speak();new Person().speak();*//*Speaking speaking2 =new Speaking(){public void speak(){System.out.println("会说话了!");}};speaking2.speak();new Speaking(){public void speak(){System.out.println("会说话了!");}}.speak();*//*当接口中方法过多,可以将匿名内部赋值给父类的一个引用,再使用父类引用进行方法调用Speaking speak = new Speaking(){public void speak(){System.out.println("会说话了!");}public void speak2(){System.out.println("会说话了2!");}public void speak3(){System.out.println("会说话了3!");}public void speak4(){System.out.println("会说话了4!");}};speak.speak();speak.speak2();speak.speak3();speak.speak4();new Speaking(){public void speak(){System.out.println("会说话了!");}public void speak2(){System.out.println("会说话了2!");}public void speak3(){System.out.println("会说话了3!");}public void speak4(){System.out.println("会说话了4!");}}.speak2();new Speaking(){public void speak(){System.out.println("会说话了!");}public void speak2(){System.out.println("会说话了2!");}public void speak3(){System.out.println("会说话了3!");}public void speak4(){System.out.println("会说话了4!");}}.speak3();new Speaking(){public void speak(){System.out.println("会说话了!");}public void speak2(){System.out.println("会说话了2!");}public void speak3(){System.out.println("会说话了3!");}public void speak4(){System.out.println("会说话了4!");}}.speak4();*///returnSpeaking().speak();//调用一个参数为接口的方法//Speaking speak = new Person();//useInterface(speak);useInterface(new Speaking(){public void speak(){System.out.println("会说话了!");}public void speak2(){System.out.println("会说话了2!");}public void speak3(){System.out.println("会说话了3!");}public void speak4(){System.out.println("会说话了4!");}});}/*public static Speaking returnSpeaking(){Speaking s = new Speaking(){public void speak(){System.out.println("方法内部的会说话了!");}};return new Speaking(){public void speak(){System.out.println("方法内部的会说话了!");}};}*/public static void useInterface(Speaking speak){speak.speak();}}interface Speaking{public abstract void speak();public abstract void speak2();public abstract void speak3();public abstract void speak4();}/*class Person implements Speaking{public void speak(){System.out.println("会说话了!");}}*/
2:包(掌握)(1)包就是永远区分相同类在不同文件夹下。其本质就是一个文件夹。
(2)包的作用:让相同类名的类可以存在。
(3)定义包:
package 包名.包名...;
(4)带包的编译和运行
A:方式一
手动式
a:javac编译代码
b:手动建立包,把class扔进去
c:java执行,带全路径
B:方式二
自动式
a:通过javac编译自动生成包
javac -d . 文件名
b:通过java运行class文件
java 包名.包名.class文件名不带扩展名
(5)不同包下的类之间的访问。
权限够大才行。
在同一个java文件中,可不可以有多个类?可以。
而我们知道类是可以用public修饰的,那么,可不可以多个类都用public修饰?不可以。
并且,一般的时候,如果有main方法也存在的时候,都是public修饰带main那个类。
文件名必须和该public修饰的类名一致。
3:导包
(1)如果多次使用一个多级包的类,每次带全路径太麻烦,我们就考虑使用导包。
(2)导包的格式:
import 包名.包名...;
注意:
在同一个包下如果有多个类被使用,可以使用通配符*来导入,但是不建议。
推荐:使用谁导入谁。
(3)面试题:
package,import,class出现的位置?
package > import > class
4:权限修饰符(掌握)
(1)用于保证在不同的情况下可以使用
(2)使用如下
本类 同一个包下不同包下的子类不同包下的无关类
private Y
默认 YY
protected Y Y Y
public Y Y YY
常见的组合规则:
权限修饰符+abstract/final/static+...
我们到底怎么用:
类:
public class Demo {
}
成员变量:
变量:private String name;
常量:public static final int X = 10;
构造方法:
不让外界创建:private Demo(){}
大部分:public Demo(){}
成员方法:
不让外界用:private void show(){}
大部分:public void method(){}
抽象方法:public abstract void function();
0 0
- 黑马程序员06——内部类、包
- 黑马程序员——Java多态、内部类、异常、包
- 黑马程序员——Java基础:内部类、异常、包
- 黑马程序员——Java包、内部类、Object类
- 黑马程序员——包、权限修饰符、内部类
- 黑马程序员——内部类、异常、包
- 黑马程序员——包,内部类总结
- 黑马程序员—内部类
- 黑马程序员—内部类
- 黑马程序员—内部类
- 黑马程序员——Java基础---包、内部类、匿名内部类
- 黑马程序员——内部类、匿名内部类
- 黑马程序员——内部类、匿名内部类
- 黑马程序员——java 内部类、匿名内部类
- 黑马程序员—内部类与匿名内部类 异常
- 黑马程序员—内部类、匿名内部类
- 黑马程序员——黑马学习日志之七 抽象类,接口,内部类,包
- 黑马程序员_内部类 异常 包
- HBase全分布式环境搭建
- poj3180 The Cow Prom(强连通)
- 简单的大数模板
- ZOJ 1365
- 安卓UI横竖转换注意事项
- 黑马程序员06——内部类、包
- leetcode Path Sum && Path Sum ||
- 数学分析教程 第十八章学习感受
- Android bluetooth介绍(四): a2dp connect流程分析
- 缘何成为一名云架构师
- HBase ORM SimpleHBase设计
- [C++]实现委托模型
- 目标跟踪的点跟踪技术(3)
- mahout中关联规则算法pfp-growth的使用以及常见错误