黑马java-JavaSE进阶-面向对象高级部分

1.static关键字

静态,可修饰成员变量,成员方法

有static:类变量-----------属于类,在计算机里只有一份,会被类的全部对象共享----------访问:类名.类变量      对象.类变量(不推荐)

无static:实例变量------- 属于每个对象-----------------对象.实例变量

2.成员方法分类:

类方法:有static修饰,属于类--------------做工具类

实例方法:无static修饰,属于对象

3.工具类

工具类中的方法都是一些类方法,每个方法都是用来完成一个功能的,工具类是给开发人员共同使用的。

为什么不用实例方法做工具类?

实例方法要创建对象使用,占内存

类方法直接用类名调用即可,调用方便,也能节省内存

工具类没有创建对象的需求,建议将工具类的构造器进行私有

4.类方法,实例方法注意事项:

  1. 类方法可以直接访问类成员,不可以直接访问实例成员
  2. 实例方法中既可以访问类成员,也可以直接访问实例成员
  3. 实例方法中可以出现this关键字,类方法中不可

5.代码块

类的五大成分之一:成员变量、构造器、方法、代码块、内部类

分类:

  1. 静态代码块:

格式:static{     }

类加载时自动执行,由于类只加载一次,使用静态代码块只会执行一次

作用:完成类的初始化。eg:对类变量的初始化赋值

  1. 实例代码块:

格式:{     }

每次创建对象时,执行实例代码块,并在构造器前执行

作用:和构造器一样,都是用来完成对象的初始化的

6.设计模式

一个问题的最优解法

单例设计模式

确保一个类只有一个对象

写法:

把类构造器私有

定义一个类变量记住类的一个对象

定义一个类方法,返回对象

   拿对象时,对象早就创建好了----- 饿汉式单例设计模式---------------------

应用场景:任务管理器对象、获取运行时对象        

7.懒汉式单例设计模式

拿对象时,才开始创建对象。

写法:

把类构造器私有

定义一个类变量用于存储对象

提供一个类方法,保证返回的是同一个对象

8.继承

使用关键字extends,让一个类和另一个类建立起父子关系

子类能继承父类的非私有成员

子类的对象是由子类、父类共同完成的

优点:

减少重复代码的编写

特点:

Java是单继承的,java中的类不支持多继承,但支持多层继承

9.权限修饰符

10.方法重写

子类重写一个方法名称、参数列表一样的方法,去覆盖父类这个方法

重写后,方法的访问,java会遵循就近原则

       先子类局部返回找

       然后子类成员范围找

       然后父类成员范围找,如果父类范围没找到则报错

注意:

使用Override注解,可指定java编译器,检查重写格式是否正确,代码可读性更好

子类重写父类方法时,访问权限必须大于或等于父类该方法的权限

复写的方法返回值类型,必须与被重写方法的返回值一样,或范围更小

私有方法、静态方法不能被重写

常见应用:

子类重写Object类的toString()方法,以返回对象的内容

11.如果子父类中,出现了重名成员,会优先用子类的,如果此时一定要在子类中使用父类可以使用super关键字,制定访问父类成员。Super.父类成员变量/方法

12.子类构造器的特点:

  • 先调用父类构造器,再执行自己    //子类默认有super()方法调用父类无参构造器
  • 如果父类构造器是有参,则子类构造器必须手写用super()调用父类的有参构造器
  • 子类构造器可以通过调用父类构造器,把对象中包含父类这部分的数据先赋初始值,再回来把对象里包含子类的这部分的数据也进行初始化赋值
  • this调用兄弟构造器

13.多态

是在继承/实现情况下,表现为对象多态、行为多态

前提:

有继承/实现关系;存在父类引用子类对象;存在方法重写

属性不谈多态

好处:

右边对象解耦合,便于扩展维护

定义方法时,使用父类类型的形参可以接受一切子类对象,扩展性更强,更便利

14.类型转换

自动类型转换:父类 变量名=new 子类()

强制类型转换:子类 变量名=(子类) 父类变量

15.final关键字:

修饰类:该类被称为最终类,特点是不能被继承

修饰方法:该方法成为最终方法,不能被重写

修饰变量:该变量只能被赋值一次,引用类型变量可以改内容,不能改地址

16.常量

使用static final修饰的成员变量

作用:通常用于记录系统的配置信息,常量建议使用大写字母表示

17.抽象类

abstract修饰的类或成员方法,修饰类就是抽象类,修饰方法就是抽象方法

注意:

  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
  • 类该有的成员(成员变量、方法、构造器)抽象类都可以有。
  • 抽象类最主要的特点:抽象类不能创建对象,仅作为一种特殊的父类,让子类继承并实现。
  • 一个类继承抽象类,必须重写完抽象类的全部抽象方法,否则这个类也必须定义成抽象类。

18.模板方法设计模式

解决了方法中存在重复代码的问题

写法:

定义一个抽象类

在抽象类中定义两个方法,一个是模板方法;放相同的代码里,一个是抽象方法;具体实现交给子类

建议使用final关键字定义修饰模板方法

19.接口

interface修饰的结构

Public interface 接口名{

成员变量(常量)

成员方法(抽象方法)

}

注意:接口不能创建对象,接口是用来被实现的,实现接口的类称为实现类

一个类可以实现多个接口,实现类实现多个接口必须重写完全部接口的全部抽象方法,否则实现类需要定义为抽象类

优点

弥补了单类继承的不足,一个类可同时实现多个接口

让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务方案

20.jdk8之后增加了三种方法:默认方法:default修饰

私有方法:private修饰

静态方法:static修饰

优点:增强了接口能力,利于项目扩展维护

21.接口的多继承

一个接口可以同时继承多个

public interface C extends B,A{

}

便于类去实现

注意事项:

一个接口继承多个接口,如果多个接口中存在方法签名冲突,则此时不支持多继承

一个类实现多个接口,如果多个接口中存在方法签名冲突,则此时不支持多实现

一个类继承了父类,又同时实现了接口,父类中和接口中有同名的默认方法,实现类会优先用父类的

一个类实现了多个接口,多个接口中存在同名的默认方法,可以不冲突,这个类重写该方法即可

22.内部类

是类中的五大成分之一(成员变量、方法、构造器、内部类、代码块),如果一个类定义在另一个类的内部,这个类就是内部类。

应用场景:

当一个类的内部,包含了一个完整的事物,且这个事物没有必要单独设计时,就可以把这个事物设计成内部类。

分类:

  1. 成员内部类

类中的一个普通成员,类似前面我们学过的普通的成员变量、成员方法。

注意:JDK16之前,成员内部类中不能定义静态成员,JDK 16开始也可以定义静态成员了

特点:

1、和前面学过的实例方法一样,成员内部类的实例方法中,同样可以直接访问外部类的实例成员、静态成员。
2、可以在成员内部类的实例方法中,拿到当前外部类对象,格式是:外部类名.this 。

  1. 静态内部类

有static修饰的内部类,属于外部类自己持有

创建对象:

注意:内部类只能直接访问外部类的静态成员,不能直接访问外部类的实例成员

  1. 局部内部类

定义在方法中,代码块中,构造器等执行体中

  1. 匿名内部类

特殊的局部内部类,不需要为这个类声明名字

特点:匿名内部类本质就是一个子类,并会立即创建出一个子类对象。

作用:用于更方便的创建一个子类对象。

23.枚举:一种特殊类

特点:

注意:枚举类中的第一行,只能写一些合法的标识符(名称),多个名称用逗号隔开。

这些名称,本质是常量,每个常量都会记住枚举类的一个对象。

特点:第一行只能罗列一些名称,这些名称都是常量,并且每个常量记住的都是枚举类的一个对象

枚举类的构造器都是私有的,因此,枚举类对外不能创造对象

枚举都是最终类,不可以被继承

枚举类中,从第二行开始,可以定义其他类的其他各种成员

编译器为枚举类新增了几个方法,并且枚举类都是继承:java.lang.Enum类的,从enum类也会继承到一些方法

应用场景:

用来表示一组信息,然后作为参数进行传输

选择对应一个一个的常量来表示一组信息,并作为参数传输

参数值不受约束

选择定义枚举表示一组信息,并作为参数传输

代码可读性好,参数值得到了约束,对使用者友好

24.泛型

定义类、接口、方法时,同时声明了一个或多个类型的变量(如:<E>),称为泛型类、泛型接口、泛型方法,统称为泛型

25.泛型接口

16.泛型方法

?通配符,使用泛型的时候可以嗲表一切类型

泛型上限:   ? extends Car:   ? 能接收的必须是Car或者其子类 。

 泛型下限:  ?  super Car : ?  能接收的必须是Car或者其父类。

17.泛型注意事项:

泛型是工作在编译阶段的,一旦程序编译成class文件,class文件中就不存在泛型了,这就是泛型擦除

泛型不支持基本数据类型,只支持对象类型

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值