JavaSe之 final static main方法 多态 内部类 抽象类

一.final

final(最终态) 修饰我们的成员方法、成员变量、类

1.final 特点:

修饰变量:该变量的值,不能被修改,必须初始化(手动赋值)
修饰方法:该方法,不能被重写
修饰类:该类,不能被继承

2.final修饰的局部变量

基本数据类型:final修饰的基本数据类型的值不能够被修改的;
引用数据类型:final修饰的引用数据类型引用类型地址不能够发生变化的,但是引用类型的
地址里面的成员属性值是可以发生变化的。
在这里插入图片描述

二.static

static 翻译中文“静态”的意思,可以修饰成员方法、成员变量。
static 修饰的特点:被类的所有对象共享访问。

1.static访问特点

非静态成员方法
1.能够访问静态的成员变量;
2.能够访问非静态的成员变量;
3.能够访问静态的成员方法;
4.能够访问非静态的成员方法;

2.静态的成员方法

1.能够访问静态成员变量,但是不能够直接访问非静态成员变量
2.能够访问静态的成员方法,但是不能够直接访问非静态成员方法

3.static关键字的用途

一句话描述就是:方便在没有创建对象的情况下进行调用(方法/变量)。
显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能

4.static关键字的应用场景

static关键字的应用场景,java中的常量(Constant)。
java中的常量(Constant) 单独类 定义 |接口形式()

三.main

1.main方法的深入理解

深入理解main方法 public static void main(String[] args)
1、 main方法是Java虚拟机在调用
2、Java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public (因为调用的时候java虚拟机和main方法不在同一个类)
3、java虚拟机执行main方法的时候不必创建对象,所以该方法必须是static
4、main方法接受String类型的数组参数,该数组中保存执行java命令时传递给所执行的类的参数

2.main方法的注意事项

1.可以直接访问本类的静态成员
2.访问本类的非静态成员,需要先创建对象,再调用即可

四.多态

多态是面向对象三大特征之一

1.多态的概述

同一个对象,在不同的时刻表现出来的不同形态
举例子: 狗
狗就是狗 狗 dog =new 狗();
我们也可以说 动物 animal =new 狗();
这里狗在不同的时刻表现出不同的形态,这就是多态。

多态的前提和体现
1.有继承/实现关系;
2.方法重写
3.有父类引用指向子类对象

2.多态的访问特点

成员变量:编译看左边,执行看左边;
成员方法:编译看左边,执行看右边;

为什么成员变量和成员方法的访问不一样呢?
这是因为 成员方法有重写、而成员变量是没有的。

3.多态的优点和缺点

多态的好处:提高了程序的扩展性
具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
多态的弊端:不能使用子类的特有功能

4.多态中的的转型

1.向上转型(多态机制)
从子到父
父类引用指向子类对象
2.向下转型(强转)
从父到子
父类引用转为子类对象

五.抽象类

在Java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。
抽象类和抽象方法用abstract关键字来修饰
抽象类: abstract class 类名{}
抽象方法: pubic abstract void eat();//抽象方法中没有方法体

1.抽象类特点

1.抽象类中不一定有抽象方法,但是有抽象方法的类必须为抽象类;
2.抽象类不能实例化;
3.抽象类由具体的子类进行实例化;
4.子类必须对父类(抽象类)中的所有抽象方法进行重写
5.在抽象类中可以定义非抽象方法
6.子类如果不重写抽象类中的抽象方法,则该类还是为抽象类
7.抽象类中可以有构造方法,用于子类访问父类时的数据初始化;

2.abstract

abstract关键字不能和哪些关键字共存

private 冲突 abstract的方法必须被子类重写,而private不能被继承
final 冲突 final修饰的方法,变量都不能修改,而abstract修饰的方法必须被重写
static 不能共存 无意义 static 是静态的,abstract方法中无方法体,无法调用。

3.接口特点

什么是接口:
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。
Java中的接口更多的体现在对行为的抽象!

1.接口 用关键字interface 修饰
public interface 接口名{}

2.类实现接口用 implements 表示
public class 类 implements 接口 {}

3.接口不能够实例化
接口如何实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态。
多态的形式:具体类多态,抽象类多态,接口多态。

4.多态的前提:有继承或者实现关系;有方法重写;有父(类/接口引用)指向(子/实现)类对象

5.接口的实现类,要么重写接口中所有的抽象方法、要么是抽象类

4.接口成员特点

1、成员变量只能是常量;(直接通过接口名称访问即可)
默认修饰符 public static final
2、成员方法只能是抽象方法;(JDK8开始 是可以在接口中定义非抽象方法 是需要加上default关键字修饰)
默认修饰符 public abstract
3、接口没有构造方法;
因为接口主要对行为进行抽象,没有具体存在,一个类如果没有父类,默认继承自Object类

5.猫和狗(接口版本)

需求:对猫和狗进行训练,他们就可以跳高了,这里加入了跳高功能,请采用抽象类和接口来实现猫和狗的案例。

(1)定义跳高接口(JumpInterface)
成员方法:跳高();—jump();
(2)定义动物类抽象类(Animal)实现跳高接口
成员变量:姓名、年龄;
构造方法:无参、带参
成员方法:get/set方法,吃饭();—eat();
(3)定义猫类(Cat),继承动物类Animal
构造方法:无参、带参
成员方法:重写eat(),重写跳高jump();
(4)定义狗类(Dog),继承动物类Animal
构造方法:无参、带参
成员方法:重写eat(),重写跳高jump();
在这里插入图片描述

6.类和接口的区别

1.类和类的继承关系 (一个类只能够单继承一个父类 不能够多继承n多个不同的父类 )
继承关系,只能单继承,但是可以多层继承
2.类和接口的实现关系(一个类可以实现n多个不同的接口)
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口
3.接口和接口继承的关系(一个接口是可以继承n多个不同的接口的)
继承关系,可以单继承,也可以多继承

7.抽象类和接口的区别

1.成员区别
1.1抽象类 变量.常量;有构造方法;有抽象方法,也有非抽象方法
1.2接口常量,抽象方法(JDK8 在接口中定义 非抽象方法)
2.关系区别
2.1类与类 继承单继承
2.2类与接口 实现,单实现和多实现
3.3接口与接口 继承,单继承和多继承
3.设计区别
抽象类 对类抽象,包括属性行为(对事物的抽象)
接口 对行为抽象,主要是行为(对行为的抽象)

举个例子:门和报警器,将门设为抽象类,

行为:关门 开门 报警

门 -----盼盼门 美心 …
不是所有的品牌门 都带 报警

比如 盼盼门 关门 开门 报警
美心门 关门 开门没有 报警

门–抽象类

8.instanceof 关键字:

instanceof 通过返回一个布尔值来指出,某个对象是否是某个特定类或者是该特定类的子类的一个实例。
1.如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。class可以是类,可以是接口。
2.instanceof在Java的编译状态和运行状态是有区别的:
2.1在编译状态中,class可以是object对象的父类,自身类,子类。在这三种情况下Java编译时不会报错。
2.2在运行转态中,class可以是object对象的父类,自身类,不能是子类。在前两种情况下result的结果为true,最后一种为false。但是class为子类时编译不会报错。运行结果为false。 (大致就是判断表达式:class 变量=(class)object的引用 是否成立)。

六.内部类

就是在一个类中定义一个类,就是为内部类。
比如:在一个类A的内部定义一个类B,类B就被称为内部类,类A相应的称为外部类

1.内部类定义格式

在这里插入图片描述

2.内部类访问特点:

内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象

3.内部类的分类

成员内部类
静态内部类
方法内部类
匿名内部类

4.成员内部类

按照内部类在类中定义的位置不同,可以分为如下两种格式:
1.成员位置(成员内部类 例如:静态内部类)
2.局部位置(局部内部类 例如:匿名内部类 )
成员内部类,外界如何创建对象使用呢?
格式:外部类名.内部类名 对象名 = 外部类对象.内部类对象;
范例:MayiktA.MayiktB mayiktB = new MayiktA().new MayiktB();

在实际开发中是不会这样使用的。因为一般内部类就是不让外界直接访问的。
成员内部的常见修饰符 private 为了保证数据的安全性

5.静态内部类

有static关键字修饰的内部类为静态内部类;
静态内部类访问外部类的静态成员变量或方法必须是静态的。

访问格式: new MayiktA.MayiktB()

6.局部内部类

局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用
该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
在这里插入图片描述

7.匿名内部类 new 接口(实现类)或者是抽象类(子类)

在这里插入图片描述
本质:是一个继承了该类(子类)或者实现了该接口的(实现类)匿名对象。

8.匿名内部类开发中使用场景

使用匿名类 可以不用创建我们的实现类 animal

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值