面对对象---抽象

2020-04-03  本文已影响0人  一花一世界yu

一、重点知识

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、可以修饰类:表示该类是抽象的?该类就不能被实例化(不能创建对象)。

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

上一篇 下一篇

猜你喜欢

热点阅读