《Java8第六章-继承和多态.ppt》由会员分享,可在线阅读,更多相关《Java8第六章-继承和多态.ppt(41页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、安卓越科技(北京)有限公司1第六章第六章继承和多态紫薇真人李万鸿安卓越科技(北京)有限公司2回顾与作业点评回顾与作业点评抽象封装属性和方法this关键字包安卓越科技(北京)有限公司3本章任务本章任务掌握继承掌握多态掌握访问修饰符掌握static final abstract关键字掌握接口安卓越科技(北京)有限公司4知识要点知识要点继承多态访问修饰符static final abstract关键字接口安卓越科技(北京)有限公司56.1Java中的继承动物食草动物食肉动物兔子狮子继承具有层次结构,并具有传递性子类继承了父类的属性和方法父类子类安卓越科技(北京)有限公司66.1Java中的继承继承具
2、有以下优点:1.代码的可重用性2.使用继承可以自定义子类3.父类的属性和方法可用于子类4.设计应用程序变得更加简单安卓越科技(北京)有限公司76.1Java中的继承前面已经讲完了抽象与封装,下面让我们进入面向对象的第二大基本特征 继承的学习。继承是指一个子类通过extends关键字,包含了它父类的属性和方法。继承的格式:修饰符 class A extends B 类体代码其中A是子类,B是父类。安卓越科技(北京)有限公司8Java中类的继承在java中,不支持多继承,也就是说,一个子类,只能继承一个父类。父类子类父类1父类2子类不过,可以利用接口,间接的实现多继承安卓越科技(北京)有限公司9c
3、lass Employee private String name;/姓名private int age;/年龄private double salary=2000.0;/薪水public Employee(String name,int age,double salary)this.name=name;this.age=age;this.salary=salary;public Employee()public double getSalary()return salary;class Manager extends Employee private double bonus;/奖金publ
4、ic 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);安卓越科技(北京)有限公司10 public class 比尔盖子 /写属性 String a=法拉利汽车;String color=红色;/方法 public void zhuanQian(
5、)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();安卓越科技(北京)有限公司11关键字 super:表示对直接父类对象的引用,可以直接用supe
6、r.xxx或super.xxx()来调用父类的属性和方法。注意:super()用在类的构造函数中时,必须是该函数的第一句代码。安卓越科技(北京)有限公司12class Employee1 private String name;/姓名private int age;/年龄private double salary=2000.0;/薪水public Employee1(String name,int age,double salary)this.name=name;this.age=age;this.salary=salary;public Employee1()public double ge
7、tSalary()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关键字调用父类的显示有参构造方法,/写在第
8、一句,通过调用父类的构造方法,完成对属性值的初始化this.position=position;public void setBonus(double bonus)this.bonus=bonus;安卓越科技(北京)有限公司13 public class Mec1 public static void main(String args)Manager1 m=new Manager1(john,22,2333,vip);m.displayInfo();安卓越科技(北京)有限公司14class Employee2 private String name;/姓名private int age;/年龄
9、private double salary=2000.0;/薪水public void displayInfo()System.out.println(name=+name+,age=+age);public Employee2(String name,int age,double salary)this.name=name;this.age=age;this.salary=salary;class Manager2 extends Employee2 private double bonus;/奖金private String position;/职位public Manager2(Stri
10、ng name,int age,double salary,String position)super(name,age,salary);this.position=position;super.displayInfo();public void setBonus(double bonus)this.bonus=bonus;安卓越科技(北京)有限公司15public static void main(String args)/TODO Auto-generated method stubManager2 m=new Manager2(john,22,2333,vip);运行结果:name=jo
11、hn,age=22安卓越科技(北京)有限公司16Object类:是所有类的父类,所有的java类都直接或间接地继承了他。Object类有以下实用方法:1.toString():返回代表该对象值的字符串2.equals(Object obj)测试其他某个对象是否与此对象相等3.hashCode():返回该对象的哈希码值4.ClassgetClass():返回此对象运行时的类5.clone():克隆一个对象,创建并返回此对象的一个副本安卓越科技(北京)有限公司17public class TestObject public static void main(String args)TestObje
12、ct 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);/比较两个对象是否相等。安卓越科技(北京)有限公司186.3多态1.概念:具有表现多种形态的能力的特征。2.JAVA中多态的
13、实现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;安卓越科技(北京)有限
14、公司192)方法重写override:用于当子类和父类具有相同的名称、返回值和形参列表。class FatherString 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-generate
15、d method stub Son c=new Son();c.suDu();安卓越科技(北京)有限公司20多态的实现: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
16、 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();/传黑白打印机的对象安卓越科技(北京)有限公司21类型转换:1.一个父类变量可以指向其
17、子类的对象 2.一个父类变量不可以访问其子类的对象增加的成员 3.可以使用“对象变量名 instanceof 类名(或接口名)”来判断该变量所指向的对 象是否属于该类。向上转型(子类的对象可以直接当做父类的对象使用)向下转型(从父类对象到子类对象的转换,要用强制类型转换)安卓越科技(北京)有限公司22类型转换:向上转型(子类的对象可以直接当做父类的对象使用)、向下转型(从父类对象到子类对象的转换)class Animal private String name;Animal(String name)this.name=name;public String getName()return nam
18、e;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;安卓越科技(北京)有限公司23 public cla
19、ss 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);/属
20、于关系动物不属于猫/向上转型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!Syst
21、em.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();/-测试类安卓越科技(北京)有限公司24动态绑定:在执行期间而不是编译时判断所引用的对象的实际类型,根据其实际的类型调用其相应的方法。条件:1.要有继承2.要有重写3.要有父类变量指向子类对象4.要有父类
22、变量调用重写的方法安卓越科技(北京)有限公司25class 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.
23、tongDian();/判定 public class TestDynamicBinding public static void main(String args)PingDing p=new PingDing();p.judge(new DianNao();p.judge(new DianShiJi();/多态调用动态绑定 安卓越科技(北京)有限公司266.4访问修饰符 private:私有的,只有在类的主体中才可以访问。protected:受保护的,该类及子类的成员都可访问 public:公共的,该类或非该类都可访问默认的,不使用修饰符,只有相同包中的类可以访问 位置 private 默
24、认 protected public同一个类 是 是 是 是同一个包内的类 否 是 是 是不同包内的子类 否 否 是 是不同包并且不是子类 否 否 否 是安卓越科技(北京)有限公司27class T private int i=10;int j=100;protected int k=1000;public int m=100000;public class TestAccesspublic static void main(String args)T t=new T();/System.out.println(t.i);/私有的不能访问System.out.println(t.j);Syst
25、em.out.println(t.k);System.out.println(t.m);安卓越科技(北京)有限公司28 6.5 static 修饰符:可修饰变量、方法、代码块。1.静态变量:用static 修饰的变量叫静态变量。类中的静态变量属于类,而不属于某个特定的对象类中的静态成员可以与类的名称一起使用,而无需创建类的对象静态变量或方法也称为类的变量或方法不管创建了类的多少实例,整个类中静态变量的副本只有一个 引用静态变量时建议使用类名来调用 声明为static的变量实质上就是全局变量 安卓越科技(北京)有限公司29 1.静态变量:class Chinese static String c
26、ountry=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);/通过对象来访
27、问静态属性 ch1.singOurCountry();安卓越科技(北京)有限公司30 2静态方法:用static 修饰的方法类的静态方法只能访问其他的静态成员,不能访问非静态成员静态方法中没有this关键字 静态方法不能被覆盖(重写)为非静态方法 class StaticFun static int i=10;int j;static void setValue(int x)/j=x;/出错 System.out.println(+i);安卓越科技(北京)有限公司313静态代码块:由static与组成的代码片段如果需要通过计算来初始化静态变量,可以声明一个静态块静态块仅在该类被加载时执行一次
28、只能初始化类的静态数据成员public class TryInitialization static int values=new int10;/静态数组成员 static for(int i=0;ivalues.length;i+)valuesi=(int)(100.0*Math.random();安卓越科技(北京)有限公司324单态设计模式:某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。singleton public class TestSingle/形式一 private static final TestSingle onlyone=new TestSingle
29、();/前面加private static final修饰后只能产生一个对象 private TestSingle()/不能在类的外部new但在类的内部可以 public static TestSingle getTestSingle()return onlyone;/外面只能通过方法调用获得一个对象 安卓越科技(北京)有限公司33public class Singleton /形式二private static Singleton instance=null;public static synchronized Singleton getInstance()/这个方法比上面有所改进,不用每次
30、都进行生成对象,只是第一次/使用时生成实例,提高了效率!if(instance=null)instance=new Singleton();return instance;安卓越科技(北京)有限公司346.6final修饰符 1.final修饰类:不能被子类继承2.final修饰方法:子类不能覆盖此方法使用在方法声明中使用final关键字表明子类不能覆盖此方法使用在声明类中,一个final方法只被实现一次使用如果一个类为final类,那么他所有的方法都为隐式的final方法 安卓越科技(北京)有限公司35 3.final修饰变量:一个变量可以声明为final,以阻止他的内容被修改声为final
31、变量后,变量只能被初始化一次,然后就不能修改值了一个final变量实质上是一个常量安卓越科技(北京)有限公司366.7 abstract 修饰符:修饰的类为抽象类,不能被实例化构造方法和static方法不能是抽象的父类的抽象方法往往在子类中实现,抽象类可以具有指向子类对象的对象引用安卓越科技(北京)有限公司37abstract class Shape /形状类 protected double length;/长 protected double width;/宽 public Shape(double length,double width)this.length=length;this.w
32、idth=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()retu
33、rn length*width/2;class Square extends Shape /*构造方法.*param num 传递至构造方法的参数 *param num1 传递至构造方法的参数 */Square(final double num,final double num1)super(num,num1);安卓越科技(北京)有限公司38/*计算正方形的面积.*return double */public double area()return length*width;class Judge/判定类public double result(Shape shape)return shape
34、.area();public class TestAbstract public static void main(String args)Judge judge=new Judge();System.out.println(矩形的面积为:+judge.result(new Rectangle(4,5);System.out.println(三角形的面积为:+judge.result(new Triangle(4,5);System.out.println(正方形的面积为:+judge.result(new Square(4,5);安卓越科技(北京)有限公司396.8接口(interface)
35、定义:使用interface关键字来定义接口接口是一个特殊的类,由常量和抽象方法组成,它仅仅是定义一些规则,由继承它的类去实现具体的方法。父类1接口1接口2子类安卓越科技(北京)有限公司401 接口的定义及实现 interface PCI/定义了一个PCI接口 public void start();/定义了一个开始的方法 public void stop();/定义了一个结束的方法,默认都是抽象方法。class SoundCard implements PCI/声卡 public void start()System.out.println(Du du.);public void stop()System.out.println(Sound stop!);public class NetworkCard implements PCI/网卡 public void start()System.out.println(Send.);public void stop()System.out.println(Network stop!);安卓越科技(北京)有限公司412接口中的常量用public static final修饰,变量值不可变3接口的多重实现 一个类可以实现多个接口,这个类 必须实现接口中所声明的所有方法。