黑马程序员——Java基础——面向对象(继承、接口、多态)
来源:互联网 发布:端口 绑定ip 编辑:程序博客网 时间:2024/05/21 12:58
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
继承的特点:关键字是:extends
继承就是为了提高代码的复用性而产生的,它可以让代码变得更简洁。它主要是由父类跟子类组成的,一个父类可以有N多个子类,而父类里面的东西就是众多子类的共性,包括变量、方法。子类中可以建立自己特有的成员,也可以覆盖父类中的方法。
关于子父类构造函数:
当子类初始化时,父类也会运行,子类的构造函数的第一行默认有一个隐藏的语句super() , 但如果父类没有空参数的构造函数时,子类要手动加一个super语句调用父类的构造函数,如super(name)。
抽象类是在继承的基础上发展来,关键字是:abstract
如果一个类中有一个用abstract修饰的抽象方法,那么该类就肯定是一个抽象类,也要用abstract修饰。
当一个方法的具体内容是不确定的,因为不同子类的该方法的内容都不一样,那么可以把该方法定义为抽象方法,让抽象类的子类来重写该方法。
定义功能中有确定和不确定的元素时,可以用到模板方法设计模式,
譬如下面的 ‘代码运行计时程序’:
abstract class GetTime{ public final void getTime(){ //被final修饰的方法是不能被重写的 long start = System.currentTimeMillis(); //该方法是返回当前毫秒数 runcode(); //调用抽象方法,让子类重写的代码执行 long end = System.currentTimeMillis(); System.out.println("毫秒:"+(end-start)); } abstract void runcode(); //因为代码不确定,所以把方法定义为抽象方法,让当前类的子类来重写}class SubTime extends GetTime{ //子类继承父类 public void runcode(){ //重写父类的抽象方法 for(int x=0;x<300;x++){ System.out.println(x); } }}public class Moban { public static void main(String[] args){ SubTime s=new SubTime(); s.getTime(); }}
接口:全是抽象方法组成。 关键字是:interface
接口与类之间是实现关系:implements
接口与接口之间是继承关系:extends,比较特殊,可以是多继承
因为它权限是最大的,所以实现它的子类的方法权限也要是最大的(public)
它对扩展功能有很大重要性。
abstract class Student{ //因为类中有抽象方法,所以要定义成抽象类 abstract void study(); //学习是每个学生都要的,但是学习的方法具体不一样,这个不明确,所以可以抽象 void sleep(){ System.out.println("sleep"); //这里的睡觉是一样,普通方法 }}interface Smoking{ //抽烟为什么要用接口呢,因为抽烟不是每个学生都会抽烟,这个不一定的元素 void smoke(); //这里表现出接口的拓展功能,就是在需要的类中实现该接口就可以新增功能} //接口里面的方法默认是public abstract类型class ZhangSan extends Student implements Smoking{ void study(){ //张三重写‘学习’方法,定义自己的方法 System.out.println("我喜欢一个人静静学习"); } public void smoke(){ //这里可以实现抽烟这个接口,说明张三抽烟,有抽烟功能 System.out.println("我会抽烟"); } }class Lisi extends Student{ //因为李四不抽烟,所以不实现抽烟接口 void study(){ System.out.println("我喜欢一大堆人一起讨论学习"); }}public class interfaceTest { public static void main(String[] args){ ZhangSan zs=new ZhangSan(); zs.study(); zs.smoke(); Lisi ls=new Lisi(); ls.study(); }}
多态:也是在继承的基础上才发生的。
具体体现是:父类的引用指向自己的子类对象。
子类一般会把父类中的方法覆盖掉,所以不同子类的方法内容会有所不同,通过父类的引用调用方法,具体会按照指向哪个子类对象去调用相应的子类方法。
下面是多态的例子:
abstract class Animal{ abstract void eat();}class Cat extends Animal{ public void eat(){ //重写父类的方法 System.out.println("吃鱼"); } public void catchMouse(){ //特定的技能 System.out.println("抓老鼠"); }}class Dog extends Animal{ public void eat(){ System.out.println("吃骨头"); } public void kanJia(){ System.out.println("看家"); }}public class DuoTai { public static void main(String[] args){ Animal a=new Cat(); //类型提升,向上转型 a.eat(); Cat c=(Cat)a; //强制将父类的引用,转成子类类型,向下转型 c.catchMouse(); function(new Cat()); function(new Dog()); } public static void function(Animal a){ a.eat(); if(a instanceof Cat){ //instanceof 看是否属于什么类 Cat c=(Cat)a; c.catchMouse(); }else if(a instanceof Dog){ Dog d=(Dog)a; d.kanJia(); } }}
- 黑马程序员——Java基础——面向对象(继承、接口、多态)
- 黑马程序员——java-面向对象二(继承,多态,抽象,接口,包,内部类)
- 黑马程序员——Java面向对象(二)之封装、继承、多态、接口等
- 黑马程序员——面向对象的继承、接口、多态
- 黑马程序员——面向对象(继承、抽象、接口)
- 黑马程序员——Java基础3 关于面向对象、封装、多态、继承,以及接口和包
- 黑马程序员——java面向对象(二)继承、抽象、接口
- 黑马程序员——Java基础---面向对象(封装、继承、单例、抽象类、接口、内部类)
- 黑马程序员———Java基础——面向对象(继承)
- 黑马程序员——Java基础---面向对象(封装、继承、多态)
- 黑马程序员——Java基础——面向对象(2)继承
- 黑马程序员 java基础<—>--->面向对象
- 黑马程序员——java基础学习(面向对象,继承)
- 黑马程序员——Java基础---深入理解面向对象(封装继承和多态)
- 黑马程序员—— Java 基础 面向对象之继承 (复习)
- 黑马程序员————面向对象(继承,抽象类,接口,多态,异常)
- 黑马程序员——java基础(面向对象)抽象、接口、内部类
- 黑马程序员---Java基础---面向对象:继承、抽象类、接口
- 山寨版QQ通信项目阶段性总结
- 基于json-lib.jar包 创建JSONObject的四个常用方法
- Laravel5中contracts详解
- git理解 操作stage unstage
- 使用[NSKeyedUnarchiver unarchiveObjectWithData:data]程序crash
- 黑马程序员——Java基础——面向对象(继承、接口、多态)
- 博客之路开启
- c++拷贝构造函数
- bind udp 数据处理
- 如何将从github下载下来的源码引进myeclipse
- Undefined symbols for architecture arm64
- ubuntu在线音乐播放器
- c++对象模型
- 正则表达式