Java8第六章-继承和多态.ppt_第1页
Java8第六章-继承和多态.ppt_第2页
Java8第六章-继承和多态.ppt_第3页
Java8第六章-继承和多态.ppt_第4页
Java8第六章-继承和多态.ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

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

文档简介

第六章,继承和多态 紫薇真人李万鸿,回顾与作业点评,抽象 封装 属性和方法 this关键字 包,本章任务,掌握继承 掌握多态 掌握访问修饰符 掌握static final abstract关键字 掌握接口,知识要点,继承 多态 访问修饰符 static final abstract关键字 接口,6.1Java中的继承,动物,食草动物,食肉动物,兔子,狮子,继承具有层次结构,并具有传递性 子类继承了父类的属性和方法,父类,子类,6.1Java中的继承,继承具有以下优点: 1.代码的可重用性 2.使用继承可以自定义子类 3.父类的属性和方法可用于子类 4.设计应用程序变得更加简单,6.1Java中的继承,前面已经讲完了抽象与封装,下面让我们进入面向对象的第二大基本特征 继承的学习。继承是指一个子类通过extends关键字,包含了它父类的属性和方法。 继承的格式: 修饰符 class A extends B 类体代码 其中A是子类,B是父类。,Java中类的继承,在java中,不支持多继承,也就是说,一个子类,只能继承一个父类。,父类,子类,父类1,父类2,子类,不过,可以利用接口,间接的实现多继承,class Employee private String name; / 姓名 private int age; / 年龄 private double salary = 2000.0; / 薪水 public Employee(String name, int age, double salary) = name; this.age = age; this.salary = salary; public Employee() public double getSalary() return salary; class Manager extends Employee private double bonus; / 奖金 public void setBonus(double bonus) this.bonus = bonus; public class TestInheritance public static void main(String args) Manager manager = new Manager(); double sal = manager.getSalary(); System.out.println(“继承的奖金为“ + sal); ,public class 比尔盖子 /写属性 String a=“法拉利汽车“; String color=“红色“; /方法 public void zhuanQian() System.out.println(“我能赚500亿“); public void pao() System.out.println(“跑300公里每秒“); public class 比尔盖子的儿子 extends 比尔盖子 public static void main(String args) / 比尔盖子 a; / a=new 比尔盖子(); 比尔盖子的儿子 b; b=new 比尔盖子的儿子(); System.out.println(b.a); System.out.println(b.color); b.pao(); ,6.1.2super关键字,super: 表示对直接父类对象的引用,可以直接用super.xxx或super.xxx()来调用父类的属性和方法。 注意: super()用在类的构造函数中时,必须是该函数的第一句代码。,class Employee1 private String name; / 姓名 private int age; / 年龄 private double salary = 2000.0; / 薪水 public Employee1(String name, int age, double salary) = name; this.age = age; this.salary = salary; public Employee1() public double getSalary() return salary; public void displayInfo() System.out.println(“name=“ + name + “,age=“ + age); class Manager1 extends Employee1 private double bonus; / 奖金 private String position; / 职位 public Manager1(String name, int age, double salary, String position) super(name, age, salary); / 子类的构造方法中,通过super关键字调用父类的显示有参构造方法, / 写在第一句, 通过调用父类的构造方法,完成对属性值的初始化 this.position = position; public void setBonus(double bonus) this.bonus = bonus; ,public class Mec1 public static void main(String args) Manager1 m=new Manager1(“john“,22,2333,“vip“); m.displayInfo(); ,class Employee2 private String name; / 姓名 private int age; / 年龄 private double salary = 2000.0; / 薪水 public void displayInfo() System.out.println(“name=“ + name + “,age=“ + age); public Employee2(String name, int age, double salary) = name; this.age = age; this.salary = salary; class Manager2 extends Employee2 private double bonus; / 奖金 private String position; / 职位 public Manager2(String name, int age, double salary, String position) super(name, age, salary); this.position = position; super.displayInfo(); public void setBonus(double bonus) this.bonus = bonus; ,public static void main(String args) / TODO Auto-generated method stub Manager2 m=new Manager2(“john“,22,2333,“vip“); ,运行结果: name=john,age=22,Object类: Java.lang.Object是所有类的父类,所有的java类都直接或间接地继承了他。,Object类有以下实用方法: 1.toString():返回代表该对象值的字符串 2.equals(Object obj)测试其他某个对象是否与此对象相等 3.hashCode():返回该对象的哈希码值 4.ClassgetClass():返回此对象运行时的类 5.clone():克隆一个对象,创建并返回此对象的一个副本,public class TestObject public static void main(String args) TestObject obj = new TestObject(); System.out.println(obj.toString();/打印对象字符串 System.out.println(obj.hashCode();/打印对象的hash码 System.out.println(obj.getClass();/显示obj对象对应的class对象的类名 TestObject obj2 = new TestObject(); System.out.println(obj.equals(obj2); /比较两个对象是否相等。 ,6.3多态 1.概念:具有表现多种形态的能力的特征。 2.JAVA中多态的实现 1)方法重载overloading:用于在同一个类中有多个具有相同名称的方法, 包括构造方法的重载,方法具有不同的参数列表。,import java.util.ArrayList; public class OverLoadTest / 属性 / 方法 / 构造方法的重载 public OverLoadTest() public OverLoadTest(int i) public OverLoadTest(ArrayList list) / 自定义方法的重载 public void display() public String display(int i, int j) return “结果“ + i + j; ,2)方法重写override:用于当子类和父类具有相同的名称、返回值和形参列表。,class Father String name=“法拉利“; String color=“red“; public void suDu() System.out.println(“father car speed =300km/h“); public class Son extends Father public void suDu() System.out.println(“son car speed =8000km/h“); public static void main(String args) / TODO Auto-generated method stub Son c=new Son(); c.suDu(); ,多态的实现: 1.子类重写父类的方法 2.编写方法时,使用父类定义的方法 3.运行时,根据实际创建的对象类型动态 决定使用哪个方法,class DaYinJi / 打印机 public void giveDaYin() System.out.println(“默认打印无色“); class CaiSePinter extends DaYinJi public void giveDaYin() System.out.println(“打印彩色字“); class HeiBaiPinter extends DaYinJi public void giveDaYin() System.out.println(“打印黑白字“); class PanDing public void judge(DaYinJi t) t.giveDaYin(); public class TestPrinter public static void main(String args) PanDing hq = new PanDing(); hq.judge(new CaiSePinter();/ 传彩色打印机的对象 hq.judge(new HeiBaiPinter(); / 传黑白打印机的对象 ,6.3.3类型转换: 1.一个父类变量可以指向其子类的对象 2.一个父类变量不可以访问其子类的对象增加的成员 3.可以使用“对象变量名 instanceof 类名(或接口名)”来判断该变量所指向的对 象是否属于该类。 向上转型(子类的对象可以直接当做父类的对象使用) 向下转型(从父类对象到子类对象的转换,要用强制类型转换),6.3.3类型转换:向上转型(子类的对象可以直接当做父类的对象使 用)、向下转型(从父类对象到子类对象的转换),class Animal private String name; Animal(String name) = name; public String getName() return name; class Cat extends Animal private String eyesColor; Cat(String n, String c) super(n); eyesColor = c; public String getEyesColor() return eyesColor; class Dog extends Animal private String furColor; Dog(String n, String c) super(n); furColor = c; public String getFurColor() return furColor; ,public class TestCast public static void main(String args) Animal a = new Animal(“动物“); Animal c = new Cat(“猫“, “black“); Dog d = new Dog(“狗“, “yellow“); System.out.println(a instanceof Animal);/ 动物属于动物 System.out.println(c instanceof Animal);/ 猫属于动物 System.out.println(d instanceof Animal);/ 狗属于动物 System.out.println(a instanceof Cat);/ 属于关系动物不属于猫 / 向上转型 Animal an = new Dog(“旺财“, “yellow“); / 小类型放到大的类型里是可以 / Animal an=new 猫科类(); 猫科类 b=new 红猫类(); 红猫类 c; / 这时候你知道最原始的类型是什么类型吗?an.getClass(); System.out.println(an.getName(); System.out.println(an.getClass(); / 通过上转后模糊了类型,可以通过 Object类继承下来的、/的.getClass() / 方法将原形显示出来 / System.out.println(an.getFurColor(); /error! System.out.println(an instanceof Animal); / true狗是动物 System.out.println(an instanceof Dog); / true狗也是狗 / 向下转型,要加强制转换符 / - 为了安全起见,要加 instanceof 判断 Dog d2 = (Dog) an; / Cat c2 = (Cat)an; System.out.println(d2.getFurColor(); / -测试类 ,6.3.4动态绑定:在执行期间而不是编译时判断所引用的对象的实际类型,根据其 实际的类型调用其相应的方法。,条件: 1.要有继承 2.要有重写 3.要有父类变量指向子类对象 4.要有父类变量调用重写的方法,class ChaZuo public void tongDian() / 插座 System.out.println(“通电功能!“); class DianShiJi extends ChaZuo public void tongDian() System.out.println(“电视机通电,看电视“); class DianNao extends ChaZuo public void tongDian() System.out.println(“电脑通电,编Java程序“); class PingDing public void judge(ChaZuo c) c.tongDian();/判定 public class TestDynamicBinding public static void main(String args) PingDing p = new PingDing(); p.judge(new DianNao(); p.judge(new DianShiJi(); /多态调用动态绑定 ,6.4访问修饰符,private:私有的,只有在类的主体中才可以访问。 protected:受保护的,该类及子类的成员都可访问 public:公共的,该类或非该类都可访问 默认的,不使用修饰符,只有相同包中的类可以访问,位置 private 默认 protected public,同一个类 是 是 是 是,同一个包内的类 否 是 是 是,不同包内的子类 否 否 是 是,不同包并且不是子类 否 否 否 是,class T private int i = 10; int j = 100; protected int k = 1000; public int m = 100000; public class TestAccess public static void main(String args) T t = new T(); /System.out.println(t.i);/私有的不能访问 System.out.println(t.j); System.out.println(t.k); System.out.println(t.m); ,6.5 static 修饰符:可修饰变量、方法、代码块。 1.静态变量:用static 修饰的变量叫静态变量。 类中的静态变量属于类,而不属于某个特定的对象 类中的静态成员可以与类的名称一起使用,而无需创建类的对象 静态变量或方法也称为类的变量或方法 不管创建了类的多少实例,整个类中静态变量的副本只有一个 引用静态变量时建议使用类名来调用 声明为static的变量实质上就是全局变量,1.静态变量: class Chinese static String country=“China“; String name; int age; void singOurCountry() System.out.println(“My dear “+country); public class TestChinese public static void main(String a) System.out.println(“chinese country is “+Chinese.country);/通过类名来访问静态属性 Chinese ch1=new Chinese(); System.out.println(“chinese country is “+ch1.country);/通过对象来访问静态属性 ch1.singOurCountry(); ,2静态方法: 用static 修饰的方法 类的静态方法只能访问其他的静态成员,不能访问非静态成员 静态方法中没有this关键字 静态方法不能被覆盖(重写)为非静态方法 class StaticFun static int i = 10; int j; static void setValue(int x) /j=x;/出错 System.out.println(“ “+ i); ,3静态代码块:由static与组成的代码片段,如果需要通过计算来初始化静态变量,可以声明一个静态块 静态块仅在该类被加载时执行一次 只能初始化类的静态数据成员 public class TryInitialization static int values = new int10; /静态数组成员 static for(int i=0; ivalues.length; i+) valuesi = (int)(100.0*Math.random(); ,4单态设计模式:某个类只能存在一个对象实例,并且该类只提供一个 取得其对象实例的方法。singleton,public class TestSingle/形式一 private static final TestSingle onlyone=new TestSingle(); /前面加private static final修饰后只能产生一个对象 private TestSingle() /不能在类的外部new但在类的内部可以 public static TestSingle getTestSingle() return onlyone;/外面只能通过方法调用获得一个对象 ,public class Singleton / 形式二 private static Singleton instance = null; public static synchronized Singleton getInstance() / 这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 / 使用时生成实例,提高了效率! if (instance=null) instance=new Singleton(); return instance; ,6.6final修饰符,1.final修饰类:不能被子类继承 2.final修饰方法:子类不能覆盖此方法 使用在方法声明中使用final关键字表明子类不能覆盖此方法 使用在声明类中,一个final方法只被实现一次 使用如果一个类为final类,那么他所有的方法都为隐式的final方法,3.final修饰变量: 一个变量可以声明为final,以阻止他的内容被修改 声为final变量后,变量只能被初始化一次,然后就不能修改值了 一个final变量实质上是一个常量,6.7 abstract 修饰符:,修饰的类为抽象类,不能被实例化 构造方法和static方法不能是抽象的 父类的抽象方法往往在子类中实现,抽象类可以具有指向子类对象的对象引用,abstract class Shape /形状类 protected double length; /长 protected double width; /宽 public Shape(double length, double width) this.length = length; this.width = width; public abstract double area(); /计算面积 class Rectangle extends Shape /矩形 Rectangle(final double num, final double num1) super(num, num1); public double area() return length * width; class Triangle extends Shape /三角形 Triangle(final double num, final double num1) super(num, num1); public double area() return length * width/2; class Square extends Shape /* 构造方法. *param num 传递至构造方法的参数 *param

温馨提示

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

评论

0/150

提交评论