关键字final
final 是一个关键字,表示最终的意思。可以用来修饰类,修饰变量,修饰方法。
修饰类:修饰类,表明该类是最终类,不能被继承
修饰变量:如果final修饰变量,表明该变量是常量,不能修改
修饰方法:如果方法被final修饰了,表明该方法是最终方法,不能重写。
关键字static
static:是一个关键字,静态的意思,可以修饰成员变量和成员方法 static修饰成员的特点: A:被类的所以对象共享 其实也是判断一个成员是否对类的所有成员共享 就是判断是否该用static的修饰条件 B:可以通过类名直接访问 Student.graduateFrom="河南工院" C:优先于对象存在 D:随着类的加载而加载
public class StaticDemo {
public static void main(String[] args) {
Student.graduateFrom="河南工院";
Student s1 =new Student();
s1.name="林青霞";
s1.age=30;
//s1.graduateFrom="河南工院";
s1.show();
System.out.println("-----------");
Student s2 =new Student();
s2.name= "刘德华";
s2.age=28;
//s2.graduateFrom="河南工院";
s2.show();
}
}
非静态的成员方法:
能访问静态的成员变量
能访问静态的成员方法
能访问非静态的成员变量
能访问非静态的成员方法
静态的成员方法:
能访问静态的成员变量
能访问静态的成员方法
注意事项:
静态成员方法中不能出现this,super这样的关键字。
原因是:静态是随着 类 的加载而加载,this,super,这样的关键字是随着 对象 的创建而存在。
先进内存,不能访问后进内存的。
*/
public class Student {
//非静态的成员变量
private String name="林青霞";
//静态的成员变量
private static int age = 30;
//非静态成员方法
public void show(){
this.name="刘德华";
System.out.println(name);
System.out.println(age);
show2();
show4();
}
public void show2(){}
//静态成员方法
public static void show3(){
//System.out.println(name);
System.out.println(age);
//show2();
show4();
}
public static void show4(){}
}
```java
在这里插入代码片
## 抽象类的概念
> 个人理解
> 抽象的类代表的是某一特征类型的类的总称,不代表具体的对象,如,动物(可以代表鸡鸭鹅兔等,但不能说动物是鸡鸭鱼兔。)。
> 抽象类与其他类的区别在于是否有abstract修饰。
## 标题
抽象类的特点
```java
/*
抽象类的特点:
A:抽象类和抽象方法必须使用abstract关键字修饰
B:抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
C:抽象类不能实例化
抽象类如何实例化呢?
参照多态的方式,通过子类对象实例化。
D:抽象类的子类
要么重写抽象类中的所有的抽象方法//@overrrid public void 方法名(){...}
要么是抽象类//在类前加上abstra修饰
*/
抽象类的成员
成员变量:
有成员变量,成员变量可以是变量也可以是常量。
构造方法:
有构造方法。
抽象类中的构造方法的作用?
用于子类访问父类数据的初始化
成员方法:
有成员方法,可以是抽象的成员方法,也可以是非抽象的。
抽象方法:限定子类必须完成某些动作
非抽象方法:提高代码复用性。 是继承得来的。
抽象类案例练习
文案简析
分析:从具体到抽象
实现:从抽象到具体
使用:使用是具体的类的对象分析:
基础班老师:
成员变量:name,age
构造方法:无参,带参
成员方法:getXXX(),setXXX(),teach(){}就业班老师: 成员变量:name,age 构造方法:无参,带参 成员方法:getXXX(),setXXX(),teach(){} 抽象的老师类: 成员变量:name,age 构造方法:无参,带参 成员方法:getXXX(),setXXX(),teach(); //方法不带大括号说明是抽象方法
代码演示
要求,一个抽象类,两个具体类(继承抽象类)。
public class TeachDemo {
public static void main(String[] args) {
//使用的是具体的类的对象
BasicTeacher b = new BasicTeacher("林青霞",30);
b.teach();
System.out.println("--------------");
b = new BasicTeacher();
b.setName("林青霞");
b.setAge(30);
b.teach();
System.out.println("------");
//多态形式的测试
Teacher t = new BasicTeacher();
t.setAge(30);
t.setName("林青霞");
t.teach();
System.out.println("----------------");
t= new BasicTeacher("林青霞",30);
t.teach();
}
}
包
/*
包:其实就是文件夹
作用:就是对类进行分类管理
举例:
学生:增加,修改,查询,删除
老师:增加,删除,修改,查询
...
方案一:按照功能分
com.itheima.add
AddStudent
AddTeachER
com.itheima.delete
Delete.Student
Delete.Teacher
...
方案二:按照模块分
com.itheima.student
AddStudent
DeleteStudent
...
com.itheima.teacher
AddTeacher
DeleteTeacher
包的定义格式:
package 包名;
如果是多级包 用 . 隔开即可
注意事项:
A:package必须时程序的第一条可执行语句
B:package语句在java文件中只能有一个
四种权限修饰符
权限修饰符:
本类 同一个包下(子类和无关类) 不同包下(子类) 不同包下(无关类)
private: Y
默认: Y Y
protected: Y Y Y
public: Y Y Y Y