继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
这幅图的意思是食肉动物继承了动物的特性,在这基础上它独有的特性是·吃肉
我们在生活中会有一个手机,手机有很多牌子,有很多种类,就假设手机都可以打电话,但是小米手机可以打王者,华为手机可以打原神。假设这两个是单独特有的属性。那我们写代码时候是不是需要写:
小米:打电话,打王者
华为:打电话,打原神
这里面打电话部分是不是重复的,都属于手机这个大的整体的特性?
所以我们可以用继承去实现减少重复写代码或者赋予特性
这里的意思是,小米手机有自己打王者的属性,也有它的父亲手机打电话的属性。华为亦如此
Java的继承用关键字extends实现
代码举例实现:
tips:我遇到了一个问题,就是前面开始写的时候出现了警告,意思是静态方法需要类去调用而不是类实例化的对象,就是你的函数方法不能是public static void call()。所以得把static删掉
子类拥有父类非 private 的属性、方法。
子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
子类可以用自己的方式实现父类的方法。
Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类,所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。
提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
这个关键字是用来继承接口的
接口是什么:接口我认为就是一个方法只有名字但是没有实现,就比如我的一个方法叫call,但是里面是空的,就是我不知道怎么call,不知道怎么实现call。只有名字的方法
interface用来声明接口
super:指向父类,可以调用父类的方法 super.方法()
this:指向自己,可以调用自己的方法 this.方法()
final关键字是指的最终的,如果 final class说明这个是最后一个类,不能被继承,如果是方法函数的化,那这个方法不能被子类修改。
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
最常用的地方就是构造器的重载。
重载规则:
多态很像重写,就是孩子跟父亲都有一个call方法,然后我的call方法与父亲的不同
虚函数,像c++里面的,就是有个名字没有实体
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。
父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。
在 Java 中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。
简而言之就是方法和属性我都封住了,只能通过函数去调用它,不能直接改变他。
举个例子,我身高是属性
我让我的身高为1.79直接赋值,就不是封装
我通过调用一个方法然后赋值我的身高为1.79,就是封装。就是不能被外部直接调用的
Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。
Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。
enum Color
{
RED, GREEN, BLUE;
}
public class MyClass {
public static void main(String[] args) {
for (Color myVar : Color.values()) {
System.out.println(myVar);
}
}
}
Java的面向对象和c++还是有一些像的,但是不能够多继承类了,但是接口可以多继承