《面向对象类的继承和内部类.ppt》由会员分享,可在线阅读,更多相关《面向对象类的继承和内部类.ppt(23页珍藏版)》请在三一文库上搜索。
1、面向对象(类的继承和内部类),上讲回顾,初步让学生了解类和对象的概念 掌握java中类和对象的创建方式 构造函数 掌握方法的重载,本讲内容,掌握类的继承 this与super的引用 掌握static /final关键字用法 内部类,继承,已有类,属性和行为,允许重用已有类来构 造新类的特性,继承(inheritance),什么是继承(派生)? 子类自动的拥有父类中定义的属性和方法. 例如: 猫生猫 狗生狗 大象生大象 概念: 父类、基类、超类、子类、派生类、衍生类、类继承、类派生,允许通过已有类构造新类,实现了代码的 重用,在父类中定义相同的属性和方法,所有的子 类无须重新定义这些属性和方法,
2、如:公共汽车、出租车、货车等都是汽车, 但它们是不同的汽车,除了具有汽车的共性外, 它们还具有自已的特点,我可以写一个汽车的类, 可以通过继承父类的汽车的所有共性。,继承,子类可以继承父类的一些属性和方法,那么它到底从父类继承了哪些东西呢? 当子类和父类位于同一包中,子类继承父类中 public、protected和默认访问级别的成员变量和成员方法。 当子类和父类不在同一包中:子类继承父类中public、protected访问级别的成员变量和成员方法。,类继承的实现,extends关键字用于继承类。 声明一个继承父类的类的通常形式如下: class subclass-name extends
3、superclass-name /类体 没有extends,默认父类为Object 只能有一个父类,即单继承,注意,被继承的类称为父类 继承父类的类称为子类 执行继承时,子类将获得父类的属性,并具有自身特有的属性。,类继承的实现,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 getSc
4、hool() ,继承实现示例,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 Company; public String getComany() ,示例:Student.java,示例二,Person是父类;定义了name/age两个属性,getInfo()方法
5、 Student / Worder分别是其的两个子类,除了已有的name/age/getInfo以外,还有自己的特有的属性和方法,继承实例,例如:动物类派生两栖动物类和哺乳动物类 图形类派生出矩形类和圆类等等 猫类派生出山猫、家猫 见实例:exp1.java,继承的特点,通过继承可以简化类的定义,实现代码的重用 JAVA只支持单继承,不允许多重继承。 可以有多层继承;类B继承类A;类C继承类B; 子类继承父类的成员变量和成员方法,但不继承父类的构造函数 在子类的构造方法中可用super(参数列表)调用父类的构造方法。 如果子类的构造方法中没有显示的调用父类构造方法,也没有使用this关键字调用
6、自己的其他构造方法,那么在产生子类实例对象时JVM自动调用父类无参数的构造方法。,多层继承形成类层次结构,Person 类,Student 类,Worker类,小学生 类,中学生 类,大学生 类,IT业 工人类,其他业 工人类,IT-java- 类,IT-C-类,IT业 其他 类,在一个分支上,位于下层的子类会继承上层所有直接或间接父类的属性和方法。,this引用,this的作用 1、区分类成员属性和方法的形参. 例: class Person String name; / 名字 public Person(String name) this.name = name; 2、this关键字通常用
7、于return语句中返回当前对象的引用。 见例子:Leaf.java 3、在构造方法中使用this来调用其它构造方法,关键字 this 与对象关联 它用于指示当前对象,this引用,class Person String name; / 名字 int age; /年龄 public Person(String aa) this.name = aa; System.out.println(name); public Person(String aa,int age) this.name = aa; this.age= age; System.out.println(name); System.o
8、ut.println(age); public Person() this(“张三“,22); / this(“李四“); / 如果该语句不注释会不会有错呢? ,class Student11 public static void main(String args) Person p = new Person(); ,在构造方法中使用this,使用格式:this(参数列表) 说明: 构造方法的第一个语句,否则会收到编译程序的报错信息 在构造方法中用this只能调用另外一个构造方法,不能调用两个。 super的使用 访问直接基类中被隐藏的数据成员 调用直接基类中被重写的成员方法 调用直接基类的构
9、造方法,参考示例:Flower.java,见例:Student.java,static 关键字,static 可以用于修饰成员变量和成员方法以及类。 静态变量:所有此类实例可共享它,即在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间。直接可通过类名来访问该变量。 静态方法:通常在一个类中定义一个方法为static,那就是说无需实例化本类的对象,可直接通过类名来调用此方法。 静态的代码块:当Java虚拟机加载类时,就会执行该代码块。,static静态成员,定义静态成员变量: static 类型 成员变量名; 或 static 类型 成员方法名; 在类载入时创建 可以被各实例对
10、象共享 可直接通过“类名.静态成员变量名”的方式访问类的变量,可直接通过”类名.静态成员方法名” 访问类的方法. 注意:不能把方法体内变量声明为静态。 例如 class Person static int age = 15; static void shout() ,static关键字确定的变量、方法、类将在该类被加载的时候创建且共享它,public class TestStatic System.out.println(Person.age); Person.shout(); ,理解static,定义一个类成员, 通常情况下类成员必须通过它的类的对象访问. 如果一个成员被声明为static
11、,这就能够在它的类的任何对象创建之前被访问; 方法和变量都可声明为static 声明为static的变量实质就是全局变量.,class StaticDemo static int a = 42; static int b = 99; static void callme() System.out.println(“a=”+a); class StaticByName public static void main(String args) StaticDemo.callme(); System.out.println(“b=”+StaticDemo.b); ,final,final可以用来修饰
12、成员,方法,类。 修饰成员:变量一旦被初始化便不可改变,相当于定义了一常量。 修饰方法:final方法是在子类中不能被覆盖的方法 修饰类:final类是无法被任何类继承的。,FinalTest.java,内部类(nested classes),将一个类定义置入另一个类定义中就叫作“内部类”。 类中定义的内部类特点 1、内部类可以直接访问外部类的成员,反之则不行。 2、内部类可以声明为private或protected。 3、内部类成员只有在内部类的范围之类是有效的。 private内部类调用方式: 在外部类的方法中实例化内部类,并调用内部类的方法, 将内部类声明为非private的就可以通过外
13、部类创建一个内部类的对象引用,并可通过该引用调用内部类自己定义的方法。,例如: Outer.Inner in = outer.new Inner(); in.display();,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、在Outer类中可在方法test()中创建 内部类Inner的对象; 4、通过Outer类的对象调用test() 方法最终就可以执行Inner类中的方法,例子:InnerClassDemo.java,小结,掌握类的继承 掌握类的this/super/static关键字的用法 掌握final关键字用法 了解内部类的概念,
链接地址:https://www.31doc.com/p-2264902.html