Java面向对象程序设计_第1页
Java面向对象程序设计_第2页
Java面向对象程序设计_第3页
Java面向对象程序设计_第4页
Java面向对象程序设计_第5页
已阅读5页,还剩73页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java面向对象程序设计1主要内容面向对象的设计思想Java类的定义构造方法对象的创建和使用static关键字类的继承this、super关键字计算机科学与技术系方法的重载和覆盖package和import语句final关键字抽象类和接口2面向对象技术基础1. 面向对象的基本思想面向对象是一种程序设计方法。基本思想:使用对象、类、继承、封装、消息等基本概念来进行程序设计。优点:符合人们日常自然的思维习惯(因为它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式)。降低、分解问题的难度和复杂性,提高整个求解过程的可控制性、可监视性、可扩充性和可

2、维护性计算机科学与技术系3面向对象技术基础2. 面向对象的设计思想分析问题时,不再分解其每一个过程。而是首先要考虑的是该问题域中涉及到哪些类(对象)这些类(对象)各有哪些属性和方法;这些类(对象)之间的关系如何。计算机科学与技术系4面向对象技术基础3. 类与对象之间的关系对象是表示现实世界中某个具体的事物;类是对对象的抽象描述。张三 类(CLASS) 如: “man class ”对对象进行抽象为类对类进行实例化5面向对象技术基础4. 面向对象的基本特征封装性:就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节。其两个主要目的:一是保护类中的数据,二是隐藏细节。继承性:

3、主要目的是为了“扩展”原本类的功能,加强或改进原本类所没有定义的属性及方法。父类和子类多态性:一个消息被不同的类型的对象或相同类型的对象接收时产生不同的行为。计算机科学与技术系6计算机科学与技术系Java类成员变量的声明格式为: 修饰符 (=缺省值)成员方法的声明格式为:3.1Java类的定义一种引用数据类型是组成Java程序的基本要素有两部分组成:成员变量和成员方法 修饰符 (形参表) /Animal.javaclass Animal /成员变量定义 public int legs; /成员方法定义 public void eat() System.out.println(“Eating”)

4、; pubilc void move() System.out.println(“Moving”); 7计算机科学与技术系Java权限修饰符private、protected、public置于类的成员定义之前,用来限定其他对象对该对象成员的访问权限。缺省为包级权限3.1Java类的定义8计算机科学与技术系修饰符使用说明:3.1Java类的定义只有公用的程序中的某些方法,才会使用public修饰符。某个成员对于大部分程序来说不太会使用到,但是对于别的package中继承的子类中会使用到,则使用protected修饰符。如果只想让同package中的类使用的方法或是属性,则使用(default)修

5、饰符。对于只是自己类内部所使用的属性或方法,则使用private修饰符来隐藏它们。如果你不确定该用何种修饰符,最好设定为(default)9计算机科学与技术系对于class的权限修饰符只可以用public和default。3.1Java类的定义public类,可以在任意地方被访问。default类,只可以被同一个包内的类访问。10计算机科学与技术系必须使用new关键字创建对象。 例:使用 对象(引用).成员变量 来引用对象的成员变量。 例:使用 对象(引用).方法(参数列表) 来调用对象的方法 例:同一个类的每个对象有不同的成员变量存储空间。同一个类的每个对象共享此类的方法。3.2对象的创建和

6、使用Person p1 = new Person();int id = p1.id;p1.setAge(22);/Zoo.javapublic class Zoo public static void main(String args) Animal animal1 = new Animal(); Animal animal2; animal2 = new Animal(); animal1.legs = 4; System.out.println(animal1 has + animal1.legs+ legs.); System.out.println(animal2 has + anim

7、al2.legs+ legs.); animal1.eat(); animal2.move(); 11计算机科学与技术系必须使用new关键字创建对象。 例:使用 对象(引用).成员变量 来引用对象的成员变量。 例:使用 对象(引用).方法(参数列表) 来调用对象的方法 例:同一个类的每个对象有不同的成员变量存储空间。同一个类的每个对象共享此类的方法。3.2对象的创建和使用Person p1 = new Person();int id = p1.id;System.out.println(id);Person p1 = new Person();p1.setAge(22);(stack seg)

8、12计算机科学与技术系是定义在Java类中的一个用来初始化对象的方法。Java中的每个类都有构造方法,用来初始化该类的一个对象。构造方法的语法格式为:例:Animal类的构造方法3.3构造方法 ()/Animal.javapublic class Animal public int legs; public Animal(int l) legs = l; public void eat() System.out.println(Eating); public void move() System.out.println(Moving); 13计算机科学与技术系创建对象时,使用构造方法初始化对象

9、的成员变量。接上例:3.3构造方法/Zoo.javapublic class Zoo public static void main(String argv) Animal animal1 = new Animal(4); Animal animal2 = new Animal(2); /Animal animal3 = new Animal(); System.out.println(animal1 has + animal1.legs + legs.); System.out.println(animal2 has + animal2.legs + legs.); animal1.eat(

10、); animal2.move(); 14计算机科学与技术系构造方法特点:3.3构造方法构造方法没有返回值,也不需要指定为void。构造方法的名称一定和类名称一样。构造方法只能由new运算符调用。当没有指定构造方法时,编译器会为类自动添加形如 类名() 的构造方法,成员变量的取值为各种类型的默认值当我们自行编写一个构造方法之后,Java在编译时就不再会帮加上前面提到的那个默认的无参构造方法。使用不同数量、不同类型的参数对类初始化会拥有多个构造方法15计算机科学与技术系用static关键字可以声明类变量(静态变量)和类方法(静态方法)。类变量为该类的所有对象共享。类变量可通过类名直接访问,也可以

11、通过该类的对象访问。类变量在定义时必须进行初始化。类变量在类加载时,就分配了内存空间。例:TestStatic.java3.4static关键字16计算机科学与技术系用static关键字可以声明静态变量(类变量)和静态方法(类方法)。静态变量仅在生成第一个对象时分配内存。类的静态变量为该类的所有对象共享。静态变量可通过类名直接访问,也可以通过该类的对象访问。static方法中不可访问非static的成员。3.4static关键字/TestStatic.javaclass Cat static int sid = 0; /sid为静态变量,用于计数 String name; int id; /i

12、d为成员变量,表示编号 Cat(String name) id = +sid; = name; public void Info() System.out.println(My name is + name + and No. is + id); 17计算机科学与技术系用static关键字可以声明静态变量(类变量)和静态方法(类方法)。3.5static关键字TestStatic.javapublic class TestStatic public static void main(String args) Cat.sid = 100; Cat mimi = new Cat

13、(mimi); Cat pipi = new Cat(pipi); mimi.Info(); pipi.Info(); 18计算机科学与技术系思考分析:如果将程序中的 static int sid = 0; 改为 int sid = 0; 编译执行时将会出现什么情况?注意:static方法中不可访问非static的成员。3.4static关键字19计算机科学与技术系Java中使用extends关键字实现类的继承机制。语法规则:Java只支持单继承,不允许多继承。注意:修饰符为private的属性和方法不会被继承。注意:构造方法也不会被继承。根类:java.lang.Object类3.5类的继承

14、修饰符 class 子类名 extends 父类名 /Fish.javapublic class Fish extends Animal public Fish() 20计算机科学与技术系Java中使用extends关键字实现类的继承机制。语法规则:Java只支持单继承,不允许多继承。通过继承,子类自动拥有父类的除private类型之外的所有成员变量和成员方法。根类:java.lang.Object类3.5类的继承 class SubClass extends SuperClass /TestExtends.javaclass Person private int id; private in

15、t age = 20; public int getAge() return age; public void setAge(int i) age = i; public int getId() return id; class Student extends Person private String school; public String getSchool() return school; public void setSchool(String n) school = n; 21计算机科学与技术系Java中使用extends关键字实现类的继承机制。语法规则:3.7类的继承 clas

16、s SubClass extends SuperClass /TestExtends.javapublic class TestExtends public static void main(String args) Student st1 = new Student(); st1.setAge(22); st1.setSchool(ycu); System.out.println(“ID: + st1.getId(); /System.out.println(“ID: + st1.id); System.out.println(AGE: + st1.getAge(); System.out.

17、println(SCHOOL: + st1.getSchool(); 22计算机科学与技术系在类的方法定义中使用的this关键字代表使用该方法的对象的引用。当必须指出当前使用方法的对象是谁时要用this。有时使用this可以处理成员变量和和重名的情况。this可以看作是一个变量,它的值是当前对象的引用例:TestThis.javathis()则是调用自己类的构造方法,它只能在构造方法中使用,且必须放在第一行。3.6this、super关键字TestThis.javapublic class TestThis int i = 0; TestThis(int i) this.i = i; /thi

18、s指该对象本身 TestThis increament() i+; return this; /this指调用该方法的对象 void print() System.out.println(i= + i); public static void main(String args) TestThis tt = new TestThis (100); tt.increament().print(); 输入结果:i=10123public class Animal public int legs; public Animal() System.out.println(Constructing); pu

19、blic Animal(int l) this(); /调用自己类的构造方法 legs = l; public static void main(String args) Animal animal1 = new Animal(4); 24计算机科学与技术系Java中使用super关键字来引用父类的成员。例:TestSuper.java3.6this、super关键字25计算机科学与技术系Java中使用super关键字来引用父类的成员。例:TestSuper.java3.10super关键字/TestSuper.javaclass FatherClass public int value; p

20、ublic void f() value = 100; System.out.println(FatherClass.value = + value); class ChildClass extends FatherClass public int value; public void f() super.f(); value = 200; System.out.println(ChildClass.value = + value); 263.6this、super关键字/TestSuper.javapublic class TestSuper public static void main(

21、String args) ChildClass cc = new ChildClass(); cc.f(); 输出结果为:FatherClass.value = 100ChildClass.value = 20027计算机科学与技术系super()是调用父类的构造方法;它只能使用在构造方法中的第一行,且必须放在第一行。例: class A public A(int i) class B extends A public B() super(0); .注意:Super()和this( )同时只能使用一种。3.6this、super关键字28计算机科学与技术系子类的构造过程中必须调用其父类的构造方

22、法。调用方法:显式和隐式 1. 显式:子类可以在自己的构造方法super(参数列表)调用父类的构造方法。 注:如果调用super(参数列表),则必须写在子类构造方法的第一行。 2. 隐式:如果子类的构造方法中没有显式地调用父类的构造方法,则系统默认先调用父类无参的构造方法。如果子类构造方法中既没显式调用父类构造方法,而父类中又没有无参的构造方法,则编译出错。 例:TestSuperSub.java3.7继承中的构造方法29计算机科学与技术系子类的构造过程中必须调用其父类的构造方法。子类可以在自己的构造方法super(参数列表)调用父类的构造方法。3.7继承中的构造方法使用this(参数列表)调

23、用本类的另外的构造方法。如果调用super(参数列表),则必须写在子类构造方法的第一行。class SuperClass private int n; SuperClass() System.out.println(SuperClass(); SuperClass(int n) System.out.println(SuperClass( + n + ); this.n = n; 30计算机科学与技术系子类的构造过程中必须调用其父类的构造方法。子类可以在自己的构造方法super(参数列表)调用父类的构造方法。3.11继承中的构造方法使用this(参数列表)调用本类的另外的构造方法。如果调用su

24、per(参数列表),则必须写在子类构造方法的第一行。class SubClass extends SuperClass private int n; SubClass() super(300); System.out.println(SubClass(); SubClass(int n) System.out.println(SubClass( + n + ); this.n = n; public class TestSuperSub public static void main(String args) SubClass sc1 = new SubClass(); SubClass sc

25、2 = new SubClass(4000); 输出结果:SuperClass(300)SubClass()SuperClass()SubClass(4000)31计算机科学与技术系练习:3.7继承中的构造方法分析下列程序的输出结果,体会构造方法和一般成员方法在继承中的区别。32计算机科学与技术系练习:3.11继承中的构造方法分析下列程序的输出结果,体会构造函数和一般成员函数在继承中的区别。class A protected void print(String s) System.out.println(s); A() print(A(); /A(String s) print(A(s); p

26、ublic void f() print(A:f(); public class B extends A B() /super( A(); print(B(); public void f() print(B:f(); public static void main(String args) B b = new B(); b.f(); 33计算机科学与技术系是指一个类中可以定义有相同的名字、但参数个数或类型不同的多个方法。调用时,编译器会根据不同的参数表选择对应的方法。例如:TestOverLoading.java3.8方法的重载/TestOverloading.javaclass Overl

27、oading void receive(int i) System.out.println(Receive one int data: ); System.out.println(i=“ + i); void receive(int x, int y) /方法重载 System.out.println(Receive two int datas: ); System.out.println(x=“ + x + y=“ + y); public class TestOverloading public static void main(String args) Overloading ol =

28、new Overloading(); ol.receive(1); ol.receive(2, 3); 34计算机科学与技术系方法重载时需要遵守的规则:3.8方法的重载多个方法享有相同的名字。区别在于:是参数的个数或者是参数类型不同。参数类型的区分度一定要足够,例如不能是同一简单类型的参数,如int与long。返回类型不能用来区分重载的方法。构造方法与普通方法一样,也可以重载。35计算机科学与技术系例如:3.8方法的重载下面是合法的重载: public void test() public void test(String str) public void test(int i, int j)

29、 public char test(char c)下面这些则属于不合法的重载: public void test(int i) public void test(byte j) public byte test(int k)36计算机科学与技术系方法重载常用于构造方法。例如:3.8方法的重载class Point int x, y; Point() /构造函数x = 0; y = 0; Point(int x, int y) /重载构造函数this.x = x; this.y = y; 37计算机科学与技术系覆盖:在子类中根据需要对从父类中继承来的方法进行重写。注意:重写方法必须和被重写方法具

30、有相同的方法名称、参数和返回值类型。重写方法不能使用比被重写方法更严格的访问权限。 例:TestOverride.java思考:覆盖和重载的区别3.9方法的覆盖(override)38计算机科学与技术系在子类中可以根据需要对从父类中继承来的方法进行重写。重写方法必须和被重写方法具有相同的方法名称、参数和返回值类型。重写方法不能使用比被重写方法更严格的访问权限。例:TestOverride.java注意:重写和重载的区别3.9方法的重写(override)class Person int id; int age = 20; public int getAge() return age; publ

31、ic void setAge(int i) age = i; public int getId() return id; public String getInfo() return ID: + id + AGE: + age; class Student extends Person private String school; public String getSchool() return school; public void setSchool(String n) school = n; public String getInfo() return ID: + id + AGE: +

32、 age + SCHOOL: + school; 39计算机科学与技术系在子类中可以根据需要对从父类中继承来的方法进行重写。重写方法必须和被重写方法具有相同的方法名称、参数3.9方法的重写(override)/TestOverride.javapublic class TestOverride public static void main(String args) Person p1 = new Person(); Student st1 = new Student(); st1.setAge(22); st1.setSchool(ycu); System.out.println( p1.g

33、etInfo() ); System.out.println( st1.getInfo() ); 40计算机科学与技术系概念:是指在执行期间(而非编译期间)判断所引用对象的实际类型,根据其实际的类型调用其方法。例:TestEqualsPolymoph.java3.10多态41计算机科学与技术系public boolean equals(Objectobj)可以根据需要在用户自定义类中重写equals()方法。例:TestEquals.java3.12Object类-equals()class Animal public String name; Animal(String name) this

34、.name = name; public void enjoy() System.out.println(叫声。); class Cat extends Animal public String eyesColor; Cat(String n, String c) super(n); eyesColor = c; public void enjoy() System.out.println(猫叫声); class Dog extends Animal public String furColor; Dog(String n, String c) super(n); furColor = c;

35、public void enjoy() System.out.println(狗叫声); 抽 象42计算机科学与技术系public boolean equals(Objectobj)可以根据需要在用户自定义类中重写equals()方法。例:TestEquals.java3.12Object类-equals()class Lady private String name; private Animal pet; Lady(String name, Animal pet) = name; this.pet = pet; public void myPetEnjoy() pet.

36、enjoy(); public class TestPolymoph public static void main(String args) Cat c = new Cat(cat_name, blue); Dog d = new Dog(dog_name, black); Lady l1 = new Lady(l1, c); Lady l2 = new Lady(l2, d); l1.myPetEnjoy(); l2.myPetEnjoy(); 43计算机科学与技术系对象状态的确定(instanceOf)instanceof是Java的一个二元运算符,作用是测试它左边的对象是否是它右边的类

37、的实例,返回boolean类型的数据。 Dog和Cat都是Animal的子类public void method(Animal pet) if( pet instanceOf Dog ) /do something as a Dog else if( pet instanceOf Cat ) /do something as a Cat else /do something else3.10多态44计算机科学与技术系总结:多态存在要有三个必要条件:3.10多态要有继承要有覆盖父类引用指向子类对象45计算机科学与技术系包的作用:便于管理大型软件系统中数目众多的类,便于类的复用;解决类的命名冲突问

38、题。指明该中定义的类所在的包。格式为:说明:package语句作为Java源文件中的第一条语句包对应于文件系统的目录管理。在package语句中用”.”来指明包(目录)的层次。如在程序第一行加上package语句,并且该文件已存储在该目录中,那么该文件就包含在该包中。package的命名全都是小写的英文字母。3.11package和import语句package pkg1.pkg2.pkg3;46计算机科学与技术系为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入了包机制。package语句作为Java源文件中的第一条语句,指明该中定义的类所在的包。若缺省该语句,则指定为

39、缺省包。格式为:包对应于文件系统的目录管理。在package语句中用”.”来指明包(目录)的层次。例:package的命名全都是小写的英文字母。3.6package和import语句package pkg1.pkg2.pkg3;package javacode.chap03;/bagX1.javapackage bag;public class X1 int x,y; public X1(int i,int j)x=i;y=j; System.out.println(“x=”+x+” ”+”y=”+y); public void show() System.out.println(“this

40、class is a x1”);/bagX1.javapackage bag;public class X2 int m,n; public X2(int i,int j)m=i;n=j; System.out.println(“m=”+m+” ”+”n=”+n); public void show() System.out.println(“this class is a x2”); 47计算机科学与技术系为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入了包机制。package语句作为Java源文件中的第一条语句,指明该中定义的类所在的包。若缺省该语句,则指定为缺省包

41、。格式为:包对应于文件系统的目录管理。在package语句中用”.”来指明包(目录)的层次。例:package的命名全都是小写的英文字母。3.11package和import语句package pkg1.pkg2.pkg3;package javacode.chap03;/x.javaimport bag.*public class X public static void main(String args) x1 a1=new x1(1,2);a1.show(); x2 a2=new x2(3,4); a2.show(); 48计算机科学与技术系注意:增加了package语句的Java源文件

42、,在编译后产生的class文件必须位于正确的目录下面(即和它所在的包的层次完全一致)。想在另一个类中使用到这个包里的类方法:写其全名。也可使用import语句,在文件的开头引入要使用到的类。java.lang包中的类,可以不需import。3.11package和import语句49计算机科学与技术系包的引用: import 包名.说明: 访问位于同一个包中的类不需引入import语句放在程序的开头classpath的设定 将要编译或执行的程序时所需要的类文件(class文件)的最上层包的父目录应设于环境变量classpath中。3.11package和import语句* /引入整个包 具体类

43、名 /只引入包中的某个类50计算机科学与技术系J2SDK中主要的包介绍3.11package和import语句java.lang: 包含一些Java语言的核心类,如String、Math、Integer、System等,提供常用功能。java.awt:包含了构成抽象窗口工具集的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。java.applet:包含applet运行所需的一些类。:包含执行与网络相关的操作的类。java.io:包含能提供多种输入/输出功能的类。java.util:包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。jar cvf pkg_name.j

44、ar 包名jar tvf pkg_name.jar51计算机科学与技术系final可用来修饰变量、方法和类。final的属性或变量,即是一个常量。final的方法不能被重写。final的类不能被继承。例:TestFinal.java3.12final关键字final的成员变量:只能被初始化一次(定义时或在构造方法中进行)final的局部变量:代表的是一个常量52计算机科学与技术系final可用来修饰变量、方法和类。final的变量不能被改变。final的方法不能被重写。final的类不能被继承。例:TestFinal.java3.14final关键字abstract class abstrac

45、tClass abstract returntype abstractMethod(paramlist)fFinal的成员变量final的局部变量final class T final int i = 8; public final void m() /i = 9; /class TT extends T /public class TestFinal public static void main(String args) T t = new T(); /t.i = 8; 53计算机科学与技术系J2SDK中提供有许多final类,例String、Math、Boolean等。(参看API文档)

46、如果自己的类不想被别人继承,可用final修饰。3.12final关键字54计算机科学与技术系用abstract关键字修饰的类,即抽象类。作用:描述概念性的内容,这样可以提高开发效率,更好地统一用户“接口”。语法格式:抽象类必须被继承,抽象方法必须被重写。抽象类不能被实例化;抽象方法只需声明,无需实现。抽象类通常包括一个或多个抽象方法,但不是一定包括若类中包含了抽象方法,则该类必须被定义为抽象类。3.13抽象类和抽象方法abstract class 抽象类名 abstract 返回类型 抽象方法(参数表);多态55计算机科学与技术系注:3.13抽象类和抽象方法虽然抽象类不能产生实例对象,但还是

47、需要构造方法的存在!abstract关键字只能用在类和方法上,而不能用在属性和一般的变量上。56计算机科学与技术系是抽象方法和常量的定义的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。接口的定义格式:3.14接口-interfacepublic interface 接口名 extends 父接口名列表 type NAME = value; /该常量被实现该接口的多个类共享; /缺省的具有public, final, static的属性 returntype methodName(paramlist); /缺省的具有 public和abst

48、ract属性57计算机科学与技术系例:3.14接口public interface Runner public static final int ID = 1; public void run();可写成:public interface Runner int ID = 1; void run();58计算机科学与技术系特性:3.14接口接口中声明的成员变量默认为public static final的,且也只能是public static final的;接口中只能定义为抽象方法,而且这些方法默认为public的,且也只能为public的接口可以继承其它接口,并添加新的属性和抽象方法。接口可以

49、实现多继承。public interface 接口名 extends 父接口名列表 即一个接口可有多个父接口(即接口可实现多继承),用逗号隔开59计算机科学与技术系在类的声明中用implements子句来表示一个类使用某个接口。多个无关的类可以实现同一个接口。一个类可以实现多个无关的接口。定义Java类的语法格式:在类体中可以使用接口中定义的常量,而且必须实现接口中定义的所有方法。3.14接口 类名 extends implements , 60计算机科学与技术系多个无关的类可以实现同一个接口。一个类可以实现多个无关的接口。与继承关系类似,接口与实现类之间存在多态性。定义Java类的语法格式:

50、3.15接口 class name extends implements , * *interface Singer public void sing(); interface Painter public void paint(); class Student implements Singer private String name; Student(String name) = name; public void study() System.out.println(studying.); public String getName() return name; pu

51、blic void sing() System.out.println(Student is singing.); 61计算机科学与技术系多个无关的类可以实现同一个接口。一个类可以实现多个无关的接口。与继承关系类似,接口与实现类之间存在多态性。定义Java类的语法格式:3.15接口 class name extends implements , * *class Teacher implements Singer, Painter private String name; Teacher(String name) = name; public String getName(

52、) return name; public void teach() System.out.println(teaching.); public void sing() System.out.println(Teacher is singing.); public void paint() System.out.println(Teacher is painting.); 62计算机科学与技术系多个无关的类可以实现同一个接口。一个类可以实现多个无关的接口。与继承关系类似,接口与实现类之间存在多态性。定义Java类的语法格式:3.15接口public class TestInterface pu

53、blic static void main(String args) Singer s1 = new Student(Helen); s1.sing(); Singer s2 = new Teacher(John); s2.sing(); Painter p1 = (Painter)s2; p1.paint(); 63接口作为一种引用类型来使用。任何实现该接口的类的实例都可以存储在该接口类型的变量中。通过这些变量可以访问类所实现的接口中的方法。计算机科学与技术系3.14接口64内部类内部类:在一个类的内部嵌套定义类。Inner Class 一般用来生成事件适配器,用于事件处理。3.15 内部类

54、 Inner Class是其它类的成员在一个语句块的内部定义在表达式内部匿名定义 计算机科学与技术系65内部类的定义和实现示例:TwoListenInner.java文件是一个说明内部类如何使用的例子其中,定义了两个内部类:MouseMotionHandler和MouseEventHandler,分别用来处理鼠标移动事件和鼠标点按事件。计算机科学与技术系3.15 内部类 Inner Classclass OutClass private int generalInt; void generalMethod()InnerClass inn=new InnerClass();inn.innerIn

55、t=1; class InnerClass private int innerInt; void print()System.out.println(generalInt=+ generalInt); public class GeneralClasspublic static void main(String args) OutClass out = new OutClass();OutClass.InnerClass inn1 = out.new InnerClass (); inn1.print();66内部类直接访问外部类的成员和方法外部类如同使用其它类一样使用自己的内部类内部类可以被

56、更多的访问控制符修饰: private:只有外层类可以使用 protected:只有外层类、与外层类处于同一个包的类、外层类的子类可以访问 static:内部类中只能访问外部类中的static成员除外层类其他类使用内部类需要以下代码形式: OutClass out = new OutClass();OutClass.InnerClass inn1 = out.new InnerClass ();内部类可以实现接口及抽象类的抽象方法3.3 内部类 Inner Class67匿名类Anonymous Class是一种特殊的内部类,是在一个表达式内部包含一个完整的类定义(类的定义和一个实例的创建同时进行)。例如:3.15 内部类 Inner Classpublic class GeneralClasspublic static void main(String args) TestInterface testInterface=new TestInterface()public

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论