2021年1月19~21日 Java面向对象相关

===========================================================
方法=方法声明+方法功能主体

=======================
在抽取事物共性时,分析阶段由下往上,代码实现阶段由上往下
=======================
抽象类中可以没有抽象方法,可以有只有普通方法
====================================
抽象类描述的一般是实体,接口一般描述的是额外的功能
=====================
接口中定义的属性全部都是静态常量,写不写修饰符,都是public static final
接口中定义的方法全部都是公共抽象,写不写修饰符,都是public abstract
但是接口本身是受修饰符影响的,不写是在本包内可以被实现,写public是所有位置都能被实现
======================
同时继承和实现时,先写继承再写实现:
![]()
====================
类、接口中的继承与实现
类和类的关系:单继承
类和接口的关系:多实现
接口和接口的关系:多继承
===========================
静态方法只能访问静态成员变量:
(如果静态方法能访问普通成员变量,那不需要创建对象就能访问普通成员变量,显然是不行的)


====================================================
构造方法在继承中的问题:
首先看一个实例:

产生这样的输出结果是因为:子类构造方法中会隐式地加一条super();
也就是执行一下父类的构造方法。为的是初始化父类的成员变量,然后再继承。
再分析下图报错的原因:

由于子类构造方法中有隐式的一行super(),但是我们在父类中手动写了重载后的构造方法,原来编译器自动添加的Father()就没了。
所以子类找不到Father(),就会报错
解决办法1:
在父类中显式定义一个默认构造方法:

解决办法2:
在子类构造方法中显式调用一个父类的构造方法:

=======================================================
多态中向上转型和向下转型的应用:
举例:
有三种类:
1、人 People 有张开嘴的功能
2、美国人 American 继承自人,有说英语的功能
3、法国人 French 继承自人 ,有说法语的功能
这三个类在代码中实现是这样:

这时如果想设计一个方法,传入People类型的对象,根据他是美国人还是法国人,从而调用不同的方法,这里就用到了多态、以及多态中的向下转型


浙公网安备 33010602011771号