黑马程序员——包,内部类总结
来源:互联网 发布:成功的网络大电影 编辑:程序博客网 时间:2024/06/13 16:04
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
一内部类
(1)把类定义在一个类的内部。
(2)特点:
A:内部类可以直接使用外部类的成员,包括私有。
B:外部类要使用内部类成员,必须创建对象使用。
(3)内部类的分类:
局部内部类:定义在方法中的内部类
(4)成员内部类
class Outer {
class Inner {
}
}
普通的修饰的时候:
外部类名.内部类名 变量 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();
class Outer {
static class Inner {
void method(){}
}
}
用静态修饰内部类时:
外部类名.内部类名 变量 = 外部类名.内部类对象
Outer.Inner oi = new Outer.Inner();
用静态修饰内部类和方法时:
Outer.Inner.method()
成员内部类:
private:为了数据的安全。
static:为了方便调用。
代码实例
class Demo04_Inner { public static void main(String[] args) { //创建外部类对象 //Out out = new Out(); //访问属性 //String name = out.name; //调用方法 //out.method(); //创建内部类对象 //out.new In(); //成员内部类创建对象格式 //Out.In x = new Out().new In(); //当使用static修饰内部类后 //System.out.println(Out.name); //Out.method(); //static修饰后的访问格式: Out.In x = new Out.In(); x.method2(); //如果使用static修饰内部类后,又使用static修饰内部类的成员 //Out.In.method2(); }}/*class Out{ String name = "唐嫣"; //内部类可是用private私有化,此时,如果想创建内部类对象,则在该外部类的方法中创建内部类对象并调用方法 private class In { public void method2(){ System.out.println(name); } } public void method() { //安全校验 In in = new In(); in.method2(); }}*/class Out{ static String name = "唐嫣"; static class In { public static void method2(){ System.out.println(name); } } public static void method() { //安全校验 In in = new In(); in.method2(); }}
(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();
}
}
代码实例
class Demo05_Inner{ public static void main(String[] args) { Out out = new Out(); out.method(); }}class Out{ private String name = "霍建华"; //外部类的普通方法 public void method() { final int i = 10; //在方法内定义局部内部类 class In2 { //定义局部内部类的成员方法 public void method(){ System.out.println(name); System.out.println(i); } } //创建内部类对象 In2 in2 = new In2(); //使用内部类对象调用内部类方法 in2.method(); }}
B:匿名内部类
a:没有名字的内部类。其本质是一个对象。是通过多态来实现的。
b:前提:存在一个抽象类或者接口。
c:格式:
new 抽象类或者接口() {
重写父类方法;
};
本质:是一个继承了类或者实现了接口的子类匿名对象。
代码实例
class Demo06_Inner { public static void main(String[] args) { Out out = new Out(); out.method(); }}class Out{ //外部类的普通方法 public void method() { /*定义一个有名字的类,并创建该类的对象,该类继承某个父类,重写父类方法。 //在方法内定义局部内部类 class 类名 extends Fu { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("内部类的方法被调用了"); } } //创建内部类对象 类名 in2 = new 类名(); //使用内部类对象调用内部类方法 in2.inMethod(); */ /*匿名内部类方式*/ //new 类名或者接口名(){覆盖类或者接口中的代码,(也可以自定义内容。)}; //创建一个有名字的匿名内部类对象 Fu fu = new Fu() { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("匿名内部类的方法被调用了"); } }; fu.inMethod(); method2(fu); //匿名对象 同时也是内部类对象 直接调用方法 new Fu() { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("匿名内部类的方法被调用了"); } }.inMethod(); //调用参数为自定义类型的方法时,使用匿名内部类对象作为参数传递 method2(new Fu() { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("匿名内部类的方法被调用了"); } }); //调用返回值为自定义类型的方法时,使用匿名内部类对象作为返回值。 Fu fu2 = method3(); fu2.inMethod(); } //自定义数据类型作为参数 public void method2(Fu fu) { fu.inMethod(); } //自定义数据类型作为返回值类型 public Fu method3() { /* Fu fu = new Fu() { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("匿名内部类的方法被调用了"); } }; return fu; */ return new Fu() { //定义局部内部类的成员方法 public void inMethod(){ System.out.println("匿名内部类的方法被调用了"); } }; }}abstract class Fu{ public abstract void inMethod();}
二导包
(1)包就是永远区分相同类在不同文件夹下。其本质就是一个文件夹。
(2)包的作用:让相同类名的类可以存在。为了组织代码。cn.itcast.action cn.itcast.service cn.itcast.db
(3)定义包:
package 包名.包名…;
(4)带包的编译和运行(理解)
A:方式一
手动式
a:javac编译代码
b:手动建立包,把class扔进去
c:java执行,带全路径
B:方式二
自动式
a:通过javac编译自动生成包
javac -d . 文件名
b:通过java运行class文件
java 包名.包名.class文件名不带扩展名
(5)不同包下的类之间的访问。
权限够大才行。以后,我们所有定义的类都用public修饰。
(6)注意
在同一个java文件中,可不可以有多个类?可以。
而我们知道类是可以用public修饰的,那么,可不可以多个类都用public修饰?不可以。
并且,一般的时候,如果有main方法也存在的时候,都是public修饰带main那个类。
三导包
(1)如果多次使用一个多级包的类,每次带全路径太麻烦,我们就考虑使用导包。
(2)导包的格式:
import 包名.包名…;
注意:
在同一个包下如果有多个类被使用,可以使用通配符*来导入,但是不建议。
推荐:使用谁导入谁。
四权限修饰符
(1)用于保证在不同的情况下可以使用
(2)使用如下
本类 同一个包下 不同包下的子类 不同包下的无关类
private Y
默认 Y Y
protected Y Y Y
public Y Y Y Y
(3)我们到底怎么用(开发的时候一般都这么做):
类:
public class Demo {
}
成员变量:
变量:private String name; 加上相应的getter和setter
常量:public static final int X = 10;
构造方法:
不让外界创建:private Demo(){}
大部分:public Demo(){}
成员方法:
不让外界用:private void show(){}
大部分:public void method(){}
抽象方法:public abstract void function();
- 黑马程序员——包,内部类总结
- 黑马程序员06——内部类、包
- 黑马程序员——Java多态、内部类、异常、包
- 黑马程序员——Java基础:内部类、异常、包
- 黑马程序员——Java包、内部类、Object类
- 黑马程序员——包、权限修饰符、内部类
- 黑马程序员——内部类、异常、包
- 黑马程序员—内部类
- 黑马程序员—内部类
- 黑马程序员—内部类
- 黑马程序员——Java基础---包、内部类、匿名内部类
- 黑马程序员_包的定义与内部类总结
- 黑马程序员——内部类的总结
- 黑马程序员——java中的匿名内部类总结
- 黑马程序员——基础知识总结_内部类
- 黑马程序员——Java基础--内部类总结
- 黑马程序员 内部类总结
- 黑马程序员---内部类总结
- hessian和xfire序列化反序列化使用注意
- 在Android手机上离线安装kali-linux的简单方法
- 多项式输出-Java
- 如何创建一个安卓Android应用
- c++ map的基本用法
- 黑马程序员——包,内部类总结
- Spark修炼之道(基础篇)——Linux大数据开发基础:第十节:Shell编程入门(二)
- *LeetCode-Different Ways to Add Parentheses
- java第一次上机实验和C++之间的比对
- OS X中app store正在下载的文件在哪里
- 黑马程序员——Java语言:网络编程
- C#中的集合--Collection
- Talk Is Cheap,
- VS2012+WDK8.0环境配置