java面向对象(高级)

面向对象高级分为以下几个部分:
在这里插入图片描述

类变量

类变量也叫静态变量,静态属性,是该类的所有对象共享的变量,任何一个该类访问他时都是相同的值,任何对象去修改他是修改的也是同一个变量。

  1. static变量是同一个类所有对象共享

  2. static类变量在类加载的时候生成

  3. 如何定义: 访问修饰符 static 数据类型 变量名;

  4. 如何访问: 类名.类变量名(推荐使用)。对象名.类变量名

  5. 类变量是该类的所有对象共享的,而实例变量是每个对象独享的。实例变量不能通过 类名.类变量名来访问

  6. 类变量的生命周期随类的加载开始,随类的消亡而消亡

类方法

类方法也叫静态方法。当方法中不涉及到任何对象相关的成员,则可以将方法设计成静态方法,提高开发效率。

  1. 类方法的定义:访问修饰符 static 数据返回类型 方法名(){}
  2. 类方法的调用: 类名.类方法名 / 对象名.类方法名
  3. 类方法和普通方法都是随着类的加载和加载,将结构信息储存在方法区中
  4. 普通方法不能通过类名调用
  5. 类方法不允许使用和对象有关的关键字如 this super
  6. 类方法只能访问静态方法或静态变量
  7. 不同成员方法及可以访问静态成员有可以访问非静态成员。

main方法

  1. 虚拟机调用main方法,所以需要将权限设为public
  2. main()方法不必创建对象使用,所以是静态的
  3. 接受String类型,接收值为在命令行打的参数

代码块

代码块又叫做初始化块,属于类中的成员(类的一部分),讲逻辑语句封装在方法体中。通过{}包围起来。
但和方法不同的是没有方法名,返回,参数,只有方法体

  1. [修饰符]{方法体}
  2. 随这类的加载而执行,只会执行一次
  3. 类的加载:创建对象时,创建子类对象时,使用类的静态成员时
  4. 在创建对象时,一个类的调用顺序:调用静态代码块和静态属性初始化。调用普通代码块和普通属性的初始化。调用构造方法
  5. 构造器第一行隐藏super和普通代码块。
  6. 静态方法只能调用静态方法和属性

单例设计模式

  1. 在整个软件系统中,莫格勒只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
  2. 分为饿汉式和懒汉式两种,区别在于,第一种再累加载时就创建了对象实例,第二种在使用时才创建
  3. 饿汉式不存在线程安全的问题,懒汉式存在
  4. 饿汉式存在浪费资源的问题

final关键字

final 可以修饰类、属性、方法和局部变量。被final修饰的属性叫常量并且必须赋值。
如果类不是final类但是含有final方法则该方法不饿能被重写,但是可以被继承。
final不能修饰构造器
final一般在以下情况使用

  1. 在不希望类被继承时
  2. 父类的某个方法不希望被覆盖或者重写
  3. 类的某个属性不希望被修改
  4. 局部变量被修改

抽象类

当父类某些类不知道如何实现时那么可以将其声明为抽象类。

  1. 抽象类: abstract class 类名{}
  2. 抽象方法: abstract 返回类型 方法名(形参);//没有方法体
  3. 抽象类不能被实例化。
  4. 抽象类可以没有抽象方法,但是如果一个类有抽象方法那么必须声明为抽象类。
  5. 抽象方法不能有方法主体
  6. 如果一个类继承了抽象类,则必须实现抽象类的所有抽象方法。除非他自己也是抽象类
  7. 抽象方法不能用private、final、static修饰

模板设计模式

抽象类就像一个模板,它可以作为多个子类的通用模板

接口

接口就是一些没有实现的方法,封装到一起,到某个类要使用的时候再根据具体情况把方法写出来。
语法: interface 接口名{//属性//抽象方法}
接口是更加抽象的抽象抽象的类。抽象类里的方法可以有方法体,接口里的所有方法都没有方法体。jdk7.0
jdk8.0接口类可以有静态方法默认方法。

注意细节和事项

  1. 接口不能被实例化
  2. 接口中所有的方法是public方法,接口中的抽象方法可以不用abstract修饰
  3. 一个普通类实现即可偶就必须将该接口的所有方法都实现。
  4. 抽象类实现接口,可以不用实现接口的方法
  5. 一个类同时可以实现多个接口
  6. 接口中的属性是能是final,而且修饰符是public static final
  7. 接口也属性的访问形式是: 接口名.属性名
  8. 接口不饿能继承其他的类,但是可以继承多个别的接口
  9. 接口的修饰符只能是默认或者public,这点和类的额修饰符是一样的。

接口和继承

  1. 当子类继承父类,就自动拥有父类的功能,如果子类需要扩展功能,可以通过实现接口的方式扩展。可以理解实现接口是对java单继承机制的一种补充。
  2. 继承的价值:解决代码的复用性和可维护性。
  3. 接口的价值:设计,设计好各种规范,让其他类去实现这些方法,即更加灵活
  4. 接口比继承更加灵活,继承是满足is-a的关系,耳机口只满足like-a的关系
  5. 接口在一定程度上实现代码解耦(接口规范性+动态绑定机制)

接口的多态性

接口可以接受不同的对象,接口存在多态传递的现象。

内部类

一个类的内部完整嵌套另一个类。被嵌套的类叫内部类,嵌套内部类的类叫外部类。
类的额成员:属性、方法、构造器、代码块、内部类
特点是可以访问私有属性,并且体现类和类的包含关系。
基本语法:

class Outer{
	class Inner{
		}
}
class Other{
}

内部类的分类

  1. 局部内部类:有类名
  2. 匿名内部类:没有类名
  3. 定义在外部类的成员位置上: 成员内部类(没有static修饰)静态内部类(使用static修饰)。

局部内部类的使用

局部内部类定义在外部类的局部位置,比如方法中并且有类名

  1. 可以直接访问外部类的所有成员,包含私有类
  2. 不能添加访问修饰符,因为它的地位等同于一个局部变量,但是可以有final 修饰
  3. 作用域:仅仅在定义它的方法或代码块中
  4. 内部类访问外部类可直接访问,外部类访问内部类需要创建对象
  5. 外部其他类不能访问局部内部类,因为局部内部类地位是一个局部变量
  6. 如果外部类和局部内部类的成员重名,默认就近原则,如果想访问外部类的成员则可以用 外部类名.this.成员 去访问。

匿名内部类的使用

  1. 本质是类
  2. 没有名字
  3. 同时还是一个对象
    基本语法:
new 类或接口(参数列表){
类体
}
注意事项
  1. 可以直接访问外部类所有成员,包含私有的
  2. 蹦年添加访问修饰符
  3. 作用域仅在定义它的方法和代码块中
  4. 外部其他类不能访问匿名内部类

成员内部类

  1. 可以直接访问外部类的所有成员包括私有
  2. 可以添加任意访问修饰符
  3. 成员内部类访问外部类成员
  4. 外部类访问成员内部类:创建对象在访问

静态内部类

静态内部类是定义在外部类的成员位置,并且有static修饰

  1. 可以直接访问外部类的所有静态成员。包含私有的不能直接访问非静态成员
  2. 可以添加任意修饰符
  3. 作用域:同其他的类为整个类体
  4. 静态内部类访问外部类,可以直接访问静态成员
  5. 外部类访问静态内部类,创建对象才能访问
  6. 外部其他类访问静态内部类
  7. 如果外部类和静态内部类重名,依然遵循就近原则
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值