java面向对象,继承和static关键字

java面向对象,继承和static关键字,第1张

java面向对象,继承和static关键字 1.1 继承

继承就是子类继承父类,但是父类私有化和构造方法不能被继承

之前的文章也有写道

私有的属性,只能属于当前类,其它类无法使用

构造方法不能被继承,因为构造方法是用来创建当前类对象的,就相当于儿子不能继承父亲的名一样

当然子类也可以拥有自己特有的属性和方法

在Java中只支持单一继承,也就是说一个子类只能有一个父类,但是一个父类可以拥有多个子 类。

作用

提高代码的重用性

继承关键字   extends;

语法格式;

[访问修饰符] class 父类{

        //代码

}

[访问修饰符] class 子类 extends 父类{

        //代码

}

1.2 super关键字 1.2.1 构造方法问题

创建继承类对象输出时,一定会先执行父类中的构造方法(默认执行的无参数的构造方法),然后再执行子类的构造方法。

如果在创建子类对象时,子类有而父类中不存在默认的构造方法,则程序编译错误。

所以想要解决这个问题,就要通过super关键字来指明调用父类的哪个构造方法,从而来创建父类对象。

super关键字

super关键字只能用在子类中

super可以表明这个数据是继承父类当中的

格式

属性:super.属性名

方法:super.方法名(参数列表)

构造方法:只有super以super(参数列表)的形式出现在子类构造方法的第一句代码时,就表示 明确了所要使用的父类构造方法。

1.3final关键字

final修饰表示最终值,无法修改

格式

final 数据类型 常量名=变量;//常量名一般建议全部大写

final class 类名{

        }

//final修饰的类,类不能被继承1.

[访问修饰符] final 子类名 extends 父类名{

        //代码

        }

//final修饰的方法,方法不能被重写

[访问修饰符] void 方法名(final 数据类型 参数a){

        a='A';

}

//final修饰方法中的参数,那么这个参数称为最终参数,在方法中无法对最终参数进行修改

1.4静态变量

关键字 static

静态变量在使用时,可以直接通过 类名.属性名 的方式调用

静态变量也可以通过 普通的new对象(对象.属性名) 的方式来调用,但是不建议。

静态变量可以被类中所有的对象共享。

当初始化static修饰的变量值时,初始化值之后的所有变量都会修改(直到初始化新的值)

但是没有被static修饰不会,当初始化一个没有被static修饰的,他只会在new对面之后初始化

而再次新new一次对想则会便会原来值

静态方法

静态方法使用时,也是通过 类名.方法名(参数列表) 的形式调用

在静态方法中只能调用静态的属性和方法

而非静态的可以调用静态方法和属性,也可以调用非静态的

静态的也不能使用this和super;

简而言之就是,静态用类名.属性名就可以调用,而非静态的就要用new对象的方式来调用

静态代码块

静态代码块位于类的内部,任何方法的外部

语法:

static{

//代码

         }

当调用这个类的时候,第一句运行会是代码块

静态代码块主要用来给静态的成员变量进行初始化

1.5方法重写

场景:在有继承关系的子类中,对父类中的方法进行重写。

目的:当父类中的方法,无法满足子类的需求时,子类可以再此基础上进行功能的扩展。

定义:子类重写父类的方法,就要和父类中的方法名、返回值类型、参数列表和参数列表内的参数顺序,数量和个数完全一致,而且访问修饰符的范围不能被缩小。

1.6 多态

多态有两种表现形式:

        方法重载(也被称为 编译时多态,也就是说编译期间已经明确了,要调用哪个方法)

        方法重写(也被称为 运行时多态,因为动态绑定机制的原因,只有运行时才能知道这个对象 是谁)

1.6.1 向上转型

        向上转型,就是把一个子类对象赋值给父类,类似于基本数据类型中的自动类型转换。因为,父类本身就包含了子类这种类型。

语法

        父类 对象名=new 子类(参数列表);

向上转型可以当作父类对象来使用,可以调用父类中所有的变量和方法,但是如果这个方法被子类重写,则会调用重写过后的方法。因为,用向上转型的对象调用被子 类重写的方法时,会发生动态绑定机制。

        绑定机制:在程序运行时,会判断当前对象的真正的创建者(通过构造方法来决定),谁真正创建的这个对象,就调用谁里面的方法。

1.6.2 向下转型

向下转型,就类似于基本数据类型中的强制类型转换,;所以把一个父类对象,强制转换成子类,需要加上强制类型转换符。

语法

        子类 对象名=(子类) 对象(向上转型的对象名);

向下转型,一定是建立在向上转型的基础上,做类型的还原。不能直接把一个父类对象,强制转换 成子类。

        因为,向下转型容易发生ClassCastException类型转换异常,所以,在进行向下转型的时候,建议 通过 instanceof关键字,来判断当前对象是否属于某个类,如果返回的结果是true,则表明可以进 行向下转型;否则,就转不了。

instanceof 关键字用法:

        对象名 instanceof 类或接口名;

可以用if判断来判断是否能向下转型

        if((向上转型的对象名)  instanceof  子类名或接口名)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5638019.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存