4.8-1 java基础

本文讲述了Java中的继承机制,重点介绍了重写规则、多态的概念,区分了抽象类和接口的特点,以及序列化在对象存储和通信中的作用。
摘要由CSDN通过智能技术生成

重写:就是父子类集成的时候,子类使用和父类相同的函数或者成员变量,将会使用子类的各类成员变量或者函数,隐藏父类的。如果还是想要使用父类的可以用super去调用

a0d7265bc30f4718ad8c05c3e1a927a1.png

重写是 Parent P = new Parent()
61de392a9739466cbdc349c735cbee4b.png
不要把函数重载理解为多态。
因为多态是一种运行期的行为,不是编译期的行为。
多态:父类型的应用可以指向子类型的对象
比如 Parent P = new Child();
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;
如果有,去调用子类的该同名方法。
(注意此处,静态 static 方法属于特殊情况,静态方法只能继承,不能重写 override,如果
子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的
引用,则调用谁的版本)
如果想要调用子类中有而父类中没有的方法,需要进行强制类型转换,如上面的例子中,将
P 转换为子类 Child 类型的引用。
Child a = (Child) p;
因为当用父类的引用指向子类的对象,用父类引用调用方法时,找不到父类中不存在的方法。
这个时候需要进行向下的类型转换,将父类引用转换为子类的引用。
例子:
public class PolyTest
{
public static void main(String[] args)
{
//向上类型转换
Cat cat = new Cat();
Animal animal = cat;
animal.sing();
//向下类型转换
Animal a = new Cat();
Cat c = (Cat) a;
c.sing();
c.eat();//编译错误
//用父类引用调用父类不存在的方法
//Animal al = new Cat();
//al.eat();
//编译错误
//向下类型转换时只能转向指向的对象类型
//Animal a2 = new Cat();
//Cat c2 = (Dog)a2;
}
}
class Animal
{
public void sing()
{
System.out.println(“Animal is singing!”);
}
}
class Dog extends Animal
{
public void sing()
{
System.out.println(“Dog is singing!”);
}
}
class Cat extends Animal
{
public void sing()
{
System.out.println(“Cat is singing!”);
}
public void eat()
{
System.out.println(“Cat is eating!”);
}
}例子的执行结果:
Cat is singing!
Cat is singing!
Cat is eating
0423b163ba544f168ba4ab538d10399f.png
抽象类其实就是之前的继承重写的步骤,为了规范子类
04ef13b65e024f669b1ffcd875ced36e.png
如果抽象类中具有抽象方法,子类必须实现抽象方法(贼重要),这个过程叫实现,或称为重写父类抽象方法
抽象类也可以继承抽象类,如果子类也是抽象类,那么该子类抽象类不必要重写父类的抽象方法,但如果有实现类继承了抽象类,必须实现抽象类的抽象方法以及抽象类父类的所有抽象

1、抽象类不能直接用new 对象()去创建。

2、抽象类必须使用abstract修饰符去修饰。

3、抽象类可以有普通的方法。

4、抽象类中的抽象方法使用abstract修饰符修饰,抽象方法没有方法体。

5、抽象类中的抽象方法交给子类去实现。

6、抽象类会被间接创建,因为在创建子类对象时先创建的是父类对象,这样抽象类作为父类会被间接的实例化,所以抽象类也有构造器。

注意:abstract只能修饰对象成员,不能修饰静态成员,抽象方法权限修饰符不能为private,final。

Java 抽象类 | 菜鸟教程,直接看这个

抽象类里面的方法域、修饰符可以理解和普通类一样,可以没有抽象方法,可以有抽象方法,抽象方法和普通方法就是没有方法体而已,然后子类必须重写抽象方法,普通方法不用重写

c60723bb1e3e4da0833333adaf0474b4.png
接口:

接口是一种特殊的抽象类,是Java提供的一个重要的功能,与抽象类不同的是:

  • 接口的所有数据成员都是静态的且必须初始化。
  • 接口中的所有方法必须都是抽象方法,不能有一般的方法。

[public] interface 接口名称 [extends  父接口名列表]
{
    [public] [static] [final]数据类型 成员变量名 = 常量;
    ...
    [public][abstract]返回值数据类型 方法名(参数表);
    ...

284861640d5f4454b7d619331b8c9285.png
1da3a05ac0534da487d07eb62c8863e6.png
c1173399c0774a6cb25d1c2be8c5d6ed.png
接口直接看这个: Java 接口 | 菜鸟教程

接口里面可以包含普通的方法实现默认用defalut修饰也可不写,也可有静态方法和方法体了。,也可以用private修饰符。口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。看起来就和普通方法一样,只是没有方法体,有方法体的其实就是defalut修饰的(也是默认不写)

基本上快和抽象类差不多了

一般使用匿名类来调用接口:

还有安卓中:

不用匿名类则是:

0f3da3c2afde4a09a35ccd81ede34445.png

数据结构:枚举、list、map等:Java 数据结构 | 菜鸟教程,注意格式,枚举是一种特殊的类

都是类哦

泛型:Java 泛型 | 菜鸟教程

序列化是一种用于保存、传输和还原对象的方法,它使得对象可以在不同的计算机之间移动和共享,这对于分布式系统、数据存储和跨平台通信非常有用。Java 序列化是一种将对象转换为字节流的过程,以便可以将对象保存到磁盘上,将其传输到网络上,或者将其存储在内存中,以后再进行反序列化,将字节流重新转换为对象。

序列化:Java 序列化 | 菜鸟教程

java语法的各种例子:Java 实例 | 菜鸟教程

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值