javase基础知识总结-oop面向对象的高级特性:封装、继承、多态、接口、final、static

继承

继承的性质

  • 继承用于提供代码的复用性,子类可以直接拥有父类的所有属性。
  • 在java中,一个类最多拥有一个父类,即只能实现单继承。但可以实现多层继承,即子类继承父类,父类继承孙子类。也就是说,一个类既可以是父类,也可以是子类。
  • 两个类是否是继承关系,可以用“is”来判断。(子类一定是一个特殊的父类)

继承的语法

子类 extends 父类

方法重写(override/overwrite)

在继承关系下,子类可以覆盖父类的方法,这种行为就叫做方法重写。
要求子类方法与父类方法名字相同,参数相同。
很简单,不举例了。

在子类中如何访问父类的成员?

使用super关键字。
另外,子类无法继承父类的构造方法,所以一般父类有构造方法,会在子类也写一个,第一行调用super();

数据类型的转换

这里的数据类型不是指基本数据类型,而是引用数据类型中的类。接口能不能转我还不知道。
类之间要转型,必须有继承关系。
向上转型可以直接转,也就是说,子类可以直接转成父类。
向下转型就需要强制转换,是有风险的。

为什么要向下转型?

因为运用多态定义的对象只能使用从父类继承的子类方法,要使用子类独有的方法,就要向下转型。

instanceof关键字

作用:判断某个对象是否是某个类的实例
如果是,就可以进行类型转换。
比如:

if(a instance Cat){
  Cat c=(Cat)a;
}else{
  ...
}

多态

首先,明确一点,继承是所有高级特性的基础,没有继承,就没有多态。
多态从语义上理解,意思是“同一类事物具有多种不同的形态”。
放在代码中,指的是“父类的引用指向子类的对象”。
比如:
Animal a=new Tiger();
以上这行代码涉及两个类型:
编译时的类型Animal在编译时起作用,它决定a可以调用哪些方法。
运行时的类型Cat在运行时起作用,它决定a在运行时真正调用的方法。
也就是说,a在运行时能够调用的是经过子类Cat重写的父类Animal中的方法。
以上也叫做动态绑定
多态的优点,就是扩展性好,面向父类编程。有利于软件版本的更新迭代。

abstract修饰符

之所以把abstract放到这里讲,就是因为目前我觉得多态和抽象类的概念几乎一样。抽象类就相当于多态的应用。
abstract可修饰方法和类:

  • 抽象方法:只有方法定义,没有方法的实现。这种方法就是用来被子类覆盖的。
  • 抽象类:不能被实例化,只能作为父类来使用。

如果一个类中有一个抽象方法,那它一定是抽象类。

封装

从语义上理解,封装指的就是“信息隐藏”。
在java中封装具体表现在:

  • 类本身就是一个封装体。
  • 方法本身也是一种封装。
  • 可以使用访问修饰符来控制各成员的访问性。
    访问修饰符有四种:
    private :在同一类内可见
    default(什么都不写):在同一包内可见
    protected:对同一包内的类和所有子类可见
    public: 对所有类可见
    一般把属性定义成private,方法定义成public。

下面讲两个修饰符

final

final修饰符可以修饰:

  • 属性:代表常量(最好全大写命名)
  • 方法:代表不允许重写的方法
  • 类:代表不能被继承的类

static

static可修饰:

  • 属性:
    使用static修饰的属性是属于类的,不使用static修饰的属性是属于对象的。
    可以通过类名.属性名来访问。
    有时也可以与final结合使用,这个属性就变成了全局的常量。
  • 方法:
    static方法也通过类名.方法名访问。
    不能使用super、this关键字。
    不能使用非静态的属性和方法。
  • 静态块:
    静态块中的代码仅在加载类时被调用一次。
    例如
    static {
    System.out.println(“这是静态块中的代码。”);
    }
    加载类主要包括以下三种情况:
    创建一个类实例。
    调用一个静态方法。
    使用一个非final的静态属性。

接口

接口是一个特殊的抽象类,接口中只有public、static、final属性及抽象方法。
关键字:interface
优点:面向接口编程,拓展性强,降低耦合。

抽象类和接口有什么区别?

  1. 抽象类中可以使用普通属性、方法、抽象方法、构造方法;而接口中只能使用public、final、static属性和抽象方法。
  2. 一个类只能继承一个抽象类;一个接口可以继承多个接口(extends);一个类可以实现多个接口(implements)。
  3. 通常使用抽象类表示一个概念,而接口表示一种功能。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值