目录
1.包
1.1包的概述和使用
其实就是文件夹
作用:对类进行分类管理
包的定义格式:
- 格式:package 包名;(多级包用.分开)
- 范例:package com.itheima;//二级包
当不用idea这样方便的工具时,创建包就需要自己完成,以下有两种方法完成:
1)手动建包
按照以前的格式编译java文件 win+r再输入javac Hellowoorld.java
手动创建包 在E盘建立文件夹com然后在com下建立文件夹itheima
把class文件放到包的最里面 把Helloworld.class文件放到com下的itheima这个文件夹下
带包执行 java.com.itheima.Helloworld
2)自动建包:javac -d.Helloworld.java java com.itheima.Helloworld
1.2导包
使用不同包下的类时,使用时要写类名加包名作为类的全路径,写起来太麻烦了,为了简化带包的操作,java就提供了导包的功能
例如:没有导包操作import java.util.Scanner;Scanner sc=new Scanner(System.in);会报错
此时就需要写类的全路径:java.util.Scanner sc=new java.util.Scanner(System.in);//java.util是包名,Scanner是其包下的类名
导包的格式:
- 格式:import 包名;
- 范例:import cn.itheima.teacher;//cn.ieheima:包名,teacher:类名
2.修饰符
2.1修饰符的分类
- 权限修饰符
- 状态修饰符
2.2权限修饰符
2.3状态修饰符
- final(最终态)
- static(静态)
final:final关键字是最终的意思,可以修饰成员方法、成员变量、类
final修饰的特点:
- 修饰方法:表明该方法是最终方法,不能被重写
- 修饰变量:表明该变量是常量,不能再次被赋值
- 修饰类:表明该类是最终类,不能被继承
final修饰局部变量:
- 变量是基本类型:final修饰指的是基本类型的数据值不能发生改变
- 变量是引用类型:final修饰指的是引用类型的地址值不能发生改变,但是地址里面的内容是可以发生改变的。(如:1)finall student st=new student();st.age=20;//引用类型的值发生改变是可以的。2)finall student st=new student();st=new student();//引用类型的地址值发生了改变,不正确)
static:static关键字是静态的意思,可以修饰成员方法,成员变量
static修饰的特点:
- 被类的所有对象共享,这也是我们判断是否使用静态关键字的条件
- 可以通过类名调用(public static int age;student.age=20;)也可以通过对象名调用(public static int age;student st=new student();st.age=20;)
- 推荐使用类名调用
static访问特点:
非静态的成员方法:
- 能访问静态成员变量
- 能访问非静态成员变量
- 能访问静态成员方法
- 能访问非静态成员方法
静态成员方法:
- 能访问静态的成员变量
- 能访问静态的成员方法
总结成一句话就是:静态成员方法只能访问静态成员
3.多态
3.1多态概述
同一个对象,在不同时刻表现出来的不同形态
多态的前提和体现:
- 有继承/实现关系
- 有方法重写
- 有父类引用指向子类对象(animal a=new cat();//animal:父类,cat:子类)
3.2多态中成员访问特点:
- 成员变量:编译看左边,执行看左边(有父类引用指向子类对象animal a=new cat();//animal:父类,cat:子类,编译时a只能使用animal中的变量,运行时也是按animal中的变量赋值)
- 成员方法:编译看左边,执行看右边(有父类引用指向子类对象animal a=new cat();//animal:父类,cat:子类,编译时a只能使用animal中的成员方法,运行时按cat中运行)
为什么成员变量和成员方法的访问不一样?
- 因为成员方法有重写,而成员变量没有
3.3多态的好处和弊端
- 多态的好处:提高了程序的扩展性,具体表现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作
- 多态的弊端:不能使用子类的特有功能
3.4多态的转型
- 向上转型:从子到父,父类引用指向子类对象;(animal a=new cat();//animal:父类,cat:子类)
- 向下转型:从父到子,父类引用转向子类对象;(animal a=new cat();cat c=(cat)a;//animal:父类,cat:子类)
4.抽象类
4.1抽象类概述
在java中,一个没有方法体的方法应该定义为抽象方法,而类中如果有抽象方法,该类必须定义为抽象类
4.2抽象类的特点
1)抽象类和抽象方法必须使用obstract关键字修饰
public abstract class 类名{}//抽象类
public abstract void eat();//抽象方法
2)抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
3)抽象类不能实例化
抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态
4)抽象类的子类
要么重写抽象类中所有的抽象方法
要么是抽象类
4.3抽象类的成员特点
- 成员变量:可以是变量也可以是常量
- 构造方法:有构造方法但是不能实例化,用于子类访问父类数据的初始化
- 成员方法:可以有抽象方法,限定子类必须完成某些动作;也可以有非抽象方法,提高代码复用性
5.接口
5.1接口概述
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用,java中的接口更多的体现在对行为的抽象
5.2接口的特点
1)接口用关键字interface修饰
public interface 接口名{}
2)类实现接口用implements表示
public class 类名 implements 接口名{}
3)接口不能实例化
接口如何实现实例化呢?参照多态的方式,通过实现类对象实例化,这叫接口多态
多态的形式:具体类多态、抽象类多态、接口多态
4)接口的实现类
要么重写接口中所有的抽象方法
要么是抽象类
5.3接口的成员特点
1)成员变量
只能是常量
默认修饰符:public static finall
2)构造方法
接口没有构造方法,因为接口主要是对行为进行抽象的,是没有具体存在
一个类如果没有父类,默认继承自object类
3)成员方法
只能是抽象方法
默认修饰符public abstract
关于接口中的方法,JDK8和JDK9有一些新特性,后面再讲解
5.4类和接口的关系
- 类和类的关系:继承关系,只能单继承,但是可以多层继承
- 类和接口的关系:实现的关系:可以单实现也可以多实现,还可以在继承一个类的同时实现多个接口
- 接口和接口的关系:继承关系,可以单继承,也可以多继承
5.5抽象类和接口的区别
5.6抽象类名作为形参和返回值
- 方法的形参是抽象类名,其实需要的是该抽象类的子类对象
- 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象
5.7接口名作为形参和返回值
- 方法的形参是接口名,其实需要的是该接口的实现类对象
- 方法的返回值是接口名,其实返回的是该接口的实现类对象