【04章Java面向对象编程(下)】面向对象编程的必杀技

❤写在前面
❤博客主页:努力的小鳴人
❤系列专栏:JavaSE超详总结😋
❤欢迎小伙伴们,点赞👍关注🔎收藏🍔一起学习!
❤如有错误的地方,还请小伙伴们指正!🌹

🔥系列传送门
【04章Java面向对象编程(中)】解密 继承性和多态性【热榜】
【04章Java面向对象编程(上)】万事万物皆对象的初体验【全站热榜第二】
【附章1Java数组中常见算法】图文并茂详解十大排序算法让您回味无穷
【03章Java数组】程序员必看数组详解
【02章Java基本语法】详细讲解让你重新认识Java基本语法和流程流程控制
【01章Java语言概述】Java学了很久了吧,快回来熟悉熟悉吧(详细)
在这里插入图片描述


一、分析main方法

分析:因Java虚拟机需调用main()方法,所以该方法的访问权限必须是public,又因为Java虚拟机在执行main()方法时不需要创建对象,所以该方法必须是static的,该方法接收String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数因为main() 方法是静态的
我们不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员

二、代码块

类的成员

  1. 作用:对Java类或对象进行初始化
  2. 分类
    静态代码块:一个类中代码块若有修饰符,则只能被static修饰
    非静态代码块:没有使用static修饰的
    1)static代码块通常用于初始化static的属性

👌静态代码块

  1. 可以有输出语句
  2. 可以对类的属性、类的声明进行初始化操作
  3. 不可以调用非静态的属性和方法
  4. 若有多个静态的代码块,那么按照从上到下的顺序依次执行
  5. 静态代码块的执行要先于非静态代码块
  6. 静态代码块随着类的加载而加载,且只执行一次

👌非静态代码块

  1. 可以有输出语句
  2. 可以对类的属性、类的声明进行初始化操作
  3. 除了调用非静态的结构外,还可以调用静态的变量或方法
  4. 若有多个非静态的代码块,那么按照从上到下的顺序依次执行
  5. 每次创建对象的时候,都会执行一次,且先于构造器执行

三、抽象类与抽象方法

在这里插入图片描述
抽象类:用abstract关键字来修饰一个类
抽象方法:●用abstract来修饰一个方法;
●只有方法的声明,没有方法的实现。以分号结束,比如:public abstract void talk();

  1. ●不能用abstract修饰变量、代码块、构造器;
    ●不能用abstract修饰私有方法、静态方法、final的方法、final的类
  2. 抽象类不能被实例化,抽象类是用来被继承的,抽象类的子类必须重写父类的抽象方法,并提供方法体
  3. 抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式
  4. 抽象类是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类
  5. 举例:Vehicle是一个抽象类,有两个抽象方法:
public abstract class Vehicle{
	public abstract double calcFuelEfficiency(); //计算燃料效率的抽象方法
	public abstract double calcTripDistance(); //计算行驶距离的抽象方法
}
public class Truck extends Vehicle{
	public double calcFuelEfficiency( ) { //写出计算卡车的燃料效率的具体方法 }
	public double calcTripDistance( ) { //写出计算卡车行驶距离的具体方法 }
}
public class RiverBarge extends Vehicle{
	public double calcFuelEfficiency( ) { //写出计算驳船的燃料效率的具体方法 }
	public double calcTripDistance( ) { //写出计算驳船行驶距离的具体方法}
}

🎁注:含有抽象方法的类必须被声明为抽象类

四、接口

interface
○有时必须从几个类中派生出一个子类,继承它们所有的属性和方法,但是,Java不支持多重继承,有了接口,就可以得到多重继承的效果
○有时必须从几个类中抽取出一些共同的行为特征,而它们之间又没有is-a的关系,仅仅是具有相同的行为特征而已
接口的本质是契约,标准,规范

  1. 格式先写extends后写implements;class SubClass extends SuperClass implements InterfaceA{ }
  2. 一个类可以实现多个接口,接口也可以继承其它接口
  3. 主要用途:被实现类实现;[面向接口编程]
    在这里插入图片描述

👌接口和抽象类之间的对比

在这里插入图片描述

👌接口中的默认方法

  1. 接口冲突:若一个接口中定义了一个默认方法,而另外一个接口中也定义了一个同名同参数的方法(不管此方法是否是默认方法),在实现类同时实现了这两个接口时
  2. 类优先原则:若一个接口中定义了一个默认方法,而父类中也定义了一个同名同参数的非抽象方法,则不会出现冲突问题

五、内部类

在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类

  1. 分类
    成员内部类(static成员内部类和非static成员内部类)
    局部内部类(不谈修饰符)、匿名内部类
  2. 声明
    class 外部类{
     方法(){
      class 局部内部类{
      }
     }
     {
      class 局部内部类{
      }
     }
    }
  3. 内部类特点:
    ●内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号,以及数字编号。
    只能在声明它的方法或代码块中使用,而且是先声明后使用。除此之外的任何地方都不能使用该类
    ●局部内部类可以使用外部类的成员,包括私有的
    可以使用外部方法的局部变量,但必须是final的
    ●不能使用public,protected,缺省,private,不能使用static修饰,不能包含静态成员
成员内部类作为类的成员的角色

可以声明为private或protected、可以调用外部类的结构、可以声明为static的,但此时就不能再使用外层类的非static的成员变量

作为类的角色

可以声明为final、可以在内部定义属性、方法、构造器等结构、可以声明为abstract类 、可以被其它的内部类继承

👌匿名内部类

  1. 格式
    new 父类构造器(实参列表)|实现接口(){
    //匿名内部类的类体部分
    }
  2. 特点
    ●匿名内部类必须继承父类或实现接口
    ●匿名内部类对象只能使用多态形式引用
    ●不能定义任何静态成员、方法和类
    ●只能创建匿名内部类的一个实例
    ●一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类

六、总结

在这里插入图片描述

🎁总结:面向对象特性,是Java学习的核心、重头戏,在学习面向对象编程过程中很多很多都不太了解,不断总结不断回头才能印象深刻,做个笔记,一起学习吧~~

👌 作者算是一名Java初学者,文章如有错误,欢迎评论私信指正,一起学习~~
😊如果文章对小伙伴们来说有用的话,点赞👍关注🔎收藏🍔就是我的最大动力!
🚩不积跬步,无以至千里书接下回,欢迎再见🌹

  • 30
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 51
    评论
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小鳴人

鳴人将永远记住您的恩惠

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值