美文网首页
面对对象---抽象

面对对象---抽象

作者: 一花一世界yu | 来源:发表于2020-04-03 21:49 被阅读0次

一、重点知识

error的子类后缀,一般都是error,但注意是一般,也不绝对

除了RuntimeException和他的子类是运行时异常,其他都是编译时异常

运行时异常,编译时是不会报错的

子类对象看为父类类型————向上转型

多态性,建立在子父类关系上——也就是只能父类的引用指向子类的对象,左边父类,右边子类,不能反过来

运行异常 classCastException 类型转换错误,类型不兼容,下面为例
父类不能直接强转为子类(可以转的前提:哪来哪去)可以转的前提是先有子类对象向上转型为父类,再有父类对象向下转型为子类对象,没有前提向上转型,编译可以通过但是会强转失败运行异常classcastExcption

注意java8以后接口中的默认方法,default代表的是默认,并不是原来权限修饰符中的那个缺省,他不是权限修饰符,可以和权限修饰符共存,默认方法可以省略public但是注意他仍然是一个public的方法

一定是子类对象才存在多态

抽象类是没有方法体的

有抽象方法的一定是抽象类,因为如果不是抽象类就可以创建对象了,但是抽象方法又无法调用,所以一定是抽象类

多态也提高了代码的扩展性

二、重点问题

1、静态方法能不能重写?

1、自己的理解

原则上是可以被重写的,但是子类重写的静态方法并不能实现对父类里的静态方法的全遮挡,导致调用仍然是调用父类的静态方法,因为静态方法随着类的加载而加载,子类对象和父类对象是绑在一起的,super的原因,此时你想调用子类的静态方法,直接类名加对象就可以调用了,在java中最好通过类名.的方式来调用静态方法,因为你如果用对象.的方式来调用静态方法,他还要先去类中找,然后再去静态域找,而用类名调用可以直接调用,快捷。

2、在Java中静态方法可以被继承,但是不能被覆盖,即不能重写。

3、如果子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。

4、父类引用指向子类对象时,只会调用父类的静态方法。所以,它们的行为也并不具有多态性。

5、静态方法是类的方法和具体对象没关系,和直接用类名调用一样。 静态方法是编译时绑定的,方法重写是运行时绑定的。

6、所以子分类中的同名方法,要么都是非静态,构成重写,要么都是静态,不构成重写,不能一个是静态一个非静态,会报错。

2、重写是一种遮挡或者隐藏,而不是覆盖

多态的前提下,如何调用父类被重写的方法

public static void main(String[] args) {

Father father = new Son();

Son son = (Son)father;

son.gg();

}

}

class Father{

public  void cc(){

System.out.println("曹宇");

}

}

class Son extends Father{

public  void cc(){

System.out.println("杨鹏");

}

public void gg(){

super.cc();

}

}

三、课堂知识

3.1 引用了类型作为参数

设计方法的时候:方法中可能需要参数(数据类型 参数名)

数据类型:

基本类型:byte,short,int,long,float,double,char,boolean

作为参数传递的时候:传的是数值。

int i = 100;

引用类型:数组,对象。。。

作为参数传递的时候:传的是引用的地址

3.2、对象的多态性

概念:指的是子类对象的多种形态:
父类的引用指向子类的对象

1、如果声明了一个父类类型的引用(=左边),创建的是父类的对象(=右边)。

可以访问父类的属性和方法。(不能访问子类的)

2、如果声明了一个子类类型的引用(=左边),创建的也是子类的对象(=右边)。

可以访问父类的属性和方法。

还可以访问子类的新增。

以及子类的重写。

3、如果声明了一个父类类型的引用(=左边),但是实际上指向了一个子类对象。(=右边)

可以访问父类的属性和方法。

以及子类重写的方法。但是不能访问子类的新增。

3.3对象的多态性的应用

如果一个方法,接收了父类类型作为参数,那么实际上传入父类对象和其他的任意子类对象都可以。

如果传入子类对象的话,会发生对象的向上转型。

3.4、abstract关键字

1、可以修饰方法:表示该方法是抽象的,该方法没有方法体。

    abstract修饰的方法,表示抽象的方法。没有方法体。

2、可以修饰类:表示该类是抽象的?该类就不能被实例化(不能创建对象)。

如果一个类中,包含了至少一个抽象方法。那么该类也必须是抽象的。抽象类必须要有子类继承,并重写这个抽象方法。如果子类没有实现这个抽象方法,那么子类也是抽象的,再等待子类来继承并重写。

相关文章

  • 面对对象---抽象

    一、重点知识 error的子类后缀,一般都是error,但注意是一般,也不绝对 除了RuntimeExceptio...

  • 设计模式-代理模式(九)

    代理模式:给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用面对抽象编程,不要面对具体编程,没事就造个类...

  • 4. 对象和数据结构(面向过程)

    数据抽象在面对对象的设计中,我们更希望不暴露数据细节,更希望以抽象形态表述数据。对外提供的接口不该暴露对象或者数据...

  • 第一章 为什么需要UML

      面向对象的精髓在抽象;面向对象的困难在抽象;面向对象的成功在于成功的抽象;面向对象的失败在于失败的抽象。  对...

  • 阿里编程规约之OOP规约

    “面向对象的精髓在抽象,面向对象的困难在抽象,面向对象的成功在于成功的抽象,面向对象的失败在于失败的抽象。正所谓成...

  • 中介者模式

    抽象中介者 抽象中介者实现类 同事类抽象对象 同事类抽象对象实现类 场景使用

  • Kubernetes核心概念

    Kubernetes由抽象对象构成,每个抽象对象对应一个声明式API,每个抽象对象由元数据(metadata)、规...

  • 0,认识面对对象的思想

    什么是对象? 就是一个带有功能和属性的人或物 什么是面对对象? 就是对现实世界对象的一种抽象,并且兼顾对象之间的各...

  • 对AOP的理解

    面向切面的编程(Aspect-Oriented Programming) 面对对象编程使功能抽象到不同的类中去,这...

  • java的初步认识

    面对对象的概念引用:对象的指针类是抽象的(相当于图纸),对象是具体的(按照图纸生产的产品)引用类型不能直接运行,可...

网友评论

      本文标题:面对对象---抽象

      本文链接:https://www.haomeiwen.com/subject/hzllphtx.html