清华IT深入Java类高级.ppt

上传人:本田雅阁 文档编号:3485621 上传时间:2019-09-02 格式:PPT 页数:35 大小:722.05KB
返回 下载 相关 举报
清华IT深入Java类高级.ppt_第1页
第1页 / 共35页
清华IT深入Java类高级.ppt_第2页
第2页 / 共35页
清华IT深入Java类高级.ppt_第3页
第3页 / 共35页
清华IT深入Java类高级.ppt_第4页
第4页 / 共35页
清华IT深入Java类高级.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

《清华IT深入Java类高级.ppt》由会员分享,可在线阅读,更多相关《清华IT深入Java类高级.ppt(35页珍藏版)》请在三一文库上搜索。

1、深入Java类,目 标,类的访问限制 类的封装 嵌套类与内部类 类的继承 方法的重写,访问权限,java中四种不同的限定词限定的成员(成员变量或成员方法),访问权限由大到小依次为: 1、public 公共的 可以被所有的类访问。 2、protected 受保护的 可以被这个类本身访问。 被它的子类(同一个包以及不同包中的子类)访问。 同一个包中的所有其他的类访问。 3、默认的/友好的 被这个类本身访问。 被同一个包中的类访问。 4、private 私有的 只能被这个类本身访问。 如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。,java中类的限定词的作用范围比较,实现

2、类的封装,封装:将成员变量声明为私有的(private),再提供一个或多个公有(public)setXX() 和getXX()方法实现对该成员变量的访问和修改。 类中的私有成员变量/成员方法只能在该类内部调用,不能通过该类的对象调用。 封装的目的 隐藏类的实现细节; 让使用者只能通过指定的方法访问数据,可以方便加入控制逻辑,限制不合理的操作; 便于修改,增强代码可维护性; 可进行数据检查。,内部类(nested classes),将一个类定义置入另一个类定义中就叫作“内部类”。 利用它可对那些逻辑上相互联系的类进行分组 并可控制一个类在另一个类里的“可见性”。 内部类对象保存了一个对外部类对象

3、的引用。 OuterClassName.this代表外部类对象的引用 InnerClassName.this代表内部类对象的引用,class Outer int outer_i = 100; void test() Inner in = new Inner(); in.display(); class Inner void display() System.out.println(“display: outer_i = “ + outer_i); ,内部类 类中定义的内部类,1、Inner类是在Outer内部定义的 2、在Inner类中可以访问Outer类中 的成员属性outer_I; 3、在

4、Outer类中可在方法test()中创建 内部类Inner的对象; 4、通过Outer类的对象调用test() 方法最终就可以执行Inner类中的方法,内部类 类中定义的内部类,在内部类对象保存了一个对外部类对象的引用,当内部类的成员方法中访问某一变量时,如果在该方法和内部类中都没有定义过这个变量,内部类中对this的引用会被传递给那个外部类对象的引用。,类中定义的内部类特点 1、内部类可以直接访问外部类的成员,反之则不行。 2、内部类可以声明为private或protected。 3、内部类成员只有在内部类的范围之类是有效的。 private内部类调用方式: 在外部类的方法中实例化内部类,并

5、调用自己的方法 实例化外部类,并调用包含内部类的方法,内部类 类中定义的内部类,static内部类,定义格式 修饰符 static class name static内部类特点: static内部类可以象一个普通外部类一样直接创建该对象。 static内部类只能访问外部类中的静态成员或方法。 static内部类可以声明static成员,但非static的内部类不可以。 修饰符没有任何限制。,public class StaticInnerDemo String name = “Tom“; void PrintName() System.out.println(“ Outer name : “+

6、name); public static class Inner int age = 10; void PrintAge() System.out.println(“ inner age : “+age); public static void main(String args) Inner inner = new Inner(); inner.PrintAge(); ,static内部类,1、Inner为静态内部类。 2、Inner不能访问names属 性和PrintName()方法。 3、在外部类中可以直接创建 该类的对象。,内部类如何被外部类引用,将内部类声明为非private的就可以通

7、过外部类创建一个内部类的对象引用,并可通过该引用调用内部类自己定义的方法。 声明调用方法: OuterClass outer = new OuterClass(); OuterClass.InnerClass inner = outer.new InnerClass ();,方法和作用域中的内部类,内部类并非只能在类里定义,也可以在几个程序块的范围之内定义内部类。 特点: 可访问外部类的成员变量。 只能访问所在方法中的final类型的局部变量,因为用final定义的局部变量相当于一个常量,它的生命周期超出方法运行的生命周期。 该类型的内部类调用方法: 直接通过外部类来调用内部类所在的方法。 O

8、uterClass.innerOfOuterMethod( );,方法和作用域中的内部类,public class InOut String str = new String(“Between“); public void amethod(final int iArgs) fianl int a = 12; class Bicycle public void sayHello() System.out.println(str); System.out.println(a); System.out.println(iArgs); Bicycle bicycle = new Bicycle();

9、bicycle.sayHello(); ,1、str为外部类的成员变量。 2、iArgs和 a都是方法amethod 的局部final变量。,InOut inout = new InOut( ); Inout.amethod( 5);,class Person public String name; public int age; public void getInfo() ,class Student public String name; public int age; public String school; public void getInfo() public String ge

10、tSchool() ,继承,一个类从另一个类派生出来的过程叫继承 被继承的类称为父类 执行该继承的类称为子类,继承是面向对象编程技术的一块基石,它允许创建分等级层次的类。 运用继承,可以创建一个通用类定义一系列一般特性。该类可以被更具体的类继承,Person是父类;定义了name/age两个属性,getInfo()方法 Student / Worder分别是其的两个子类,除了已有的name/age/getInfo以外,还有自己的特有的属性和方法,继承,继承的实现,通过extends关键字来实现类间的继承关系 声明一个继承父类的类的通常形式如下: class subclass-name exte

11、nds superclass-name /类体 注意: 没有extends,默认父类为Object 只能有一个父类,即单继承 子类继承父类的全部成员(方法和属性),除private的成员/方法,继承的实现,class Person public String name; public int age; public void getInfo() ,class Student extends Person public String school; public String getSchool() ,class Worker extends Person public String Compa

12、ny; public String getComany() ,继承的特点,通过继承可以简化类的定义 JAVA只支持单继承,不允许多重继承。 可以有多层继承;类B继承类A;类C继承类B; 子类继承父类的成员变量和成员方法,但不继承父类的构造函数,但在子类的构造方法中可以使用super(参数列表)调用父类的构造方法。 如果子类的构造方法中没有显示的调用父类构造方法,也没有使用this关键字调用自己的其他构造方法,那么在产生子类实例对象时JVM自动调用父类无参数的构造方法。,多层继承,Person 类,Student 类,Worker类,小学生 类,中学生 类,大学生 类,IT业 工人类,其他业 工

13、人类,IT-java- 类,IT-C-类,IT业 其他 类,构造方法不能被继承,尽管一个子类从父类继承所有的方法和变量,但它不继承构造方法。 一个类能得到构造方法,只有两个办法。 写构造方法 可以在子类构造方法中用super(参数列表)调用父类的构造方法 super()必须是第一个被执行的语句 没有构造方法,使用缺省构造方法,Super的用法,super用来引用当前对象的父类 调用父类的构造方法,如: super(paramlist); 访问父类被隐藏的成员变量,如: super.variable;,重 写,在子类中可以根据需要对从父类中继承来的方法进行修改方法重写: 重写的方法与父类中的方法

14、有相同的方法名、参数列和返回值类型。 具体的实现方法可以不一样。 注意点: 如果在子类中想调用父类中的那个被重写的方法,我们可以用super.方法的格式 。 重写方法时,不能使用比父类中被重写的方法更严格的访问权限 。 public -protected - default -private (高到低),覆盖和重载是JAVA中实现多态性的两种方法,重 写,class Person String name; int age; public void getInfo() ,class Student extends Person public String school; public Strin

15、g getSchool() public void getInfo() ,class Worker extends Person public String Company; public String getComany() public void getInfo() ,1、父类的getInfo()使用了public的 访问权限,则子类必须也使用public 2、如果父类的使用protected 的, 则子类的可以使用public 或 protedted的。,final关键字,Java中声明类、属性和方法时,可使用关键字final来修饰。 final标记的类不能被继承。 final标记的方法

16、不能被子类重写。 final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。 public static final共同标记常量时,这个常量就成了全局的常量。 public static final int MAXCOUNT=10; final Sting NAME=“SUN”;,final标明某一个对象(类,属性,方法)是固定不变的。,对象的类型转换,子类对象可以自动转换成父类。 SubClass sub = new subClass(); SupperClass sup = sub; Student s = new Student(); Person p = s; 父类转换成子类

17、必须使用强制转换。 SupperClass sup = new SupperClass(); SubClass sub = (SubClass)sup; Person p = new Person (); Student s =(Student) p;,语法格式: 对象 instanceof 类(或接口) 返回值为布尔值,真true或假false; String s = “abc”; s instanceof String Person p = new Person; p instanceof Person Student stu = new Student(); stu instanceof

18、 Student,instanceof,instanceof 操作符可以用它来判断一个实例对象是否属于一个类,对象的类型转换,在你接收父类的一个引用时,你可以通过使用Instanceof运算符判定该对象实际上是你所要的子类,并可以用类型转换该引用的办法来恢复对象的全部功能。,例子: TestInstanceOf.java,父类与子类的关系,父类对象与和子类对象的转化需要注意如下的原则: 子类对象可以被视为是其父类的一个对象; 父类对象不能当成是其某一个子类的对象; 如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为形式参数; 如果父类对象引用指向的实际是一个子类对

19、象,那么这个父类对象的引用可以用强制类型转换转化成子类对象的引用。,Object 类,Object类是java中所有类顶级父类。 如果一个类没有明显的使用extends继承另一个父类,则默认是继承了Object类。 Object类中的方法如果在子类没有被覆盖的话,则默认使用的是Object中的方法。 Object.java中的equals方法: public boolean equals(Object obj) return (this = obj); ,1、=用于比较两个对象栈中存放的 首地址是否一样 2、equals用于比较两个对象是否是同 一个对象,既内容是否相同,在自己的类中,如果要通

20、过equals()方法来比较两个对象内容是否相等,就要覆盖该方法,自己来实现具体的内容比较。 例如: 比较两个同学实例是否是一个指同一个人,我们只要比较他们的名字/年龄/性别是否一样就可以判断,Object 类,Object类,public boolean equals(Object obj) Student st = null; if (obj instanceof Student) st = (Student) obj; else return false; if (st.name = this.name ,面向对象的多态性,应用程序不必为每一个派生类(子类)编写功能调用,只需要对抽象基类/顶级父类进行处理即可。这一招叫“以不变应万变”,可以大大提高程序的可复用性。 派生类的功能可以被基类的引用变量引用,这叫向后兼容,可以提高程序的可扩充性和可维护性。 以前写的程序可以被后来程序调用不足为奇,现在写的程序能调用以后写的程序就了不起了。,总 结,类的访问限制 类的封装 嵌套类与内部类 类的继承 方法的重写,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1