包
-
可以理解为文件夹
-
在Java中使用同一个包中的类,不需要导包
-
使用Java.lang包中的类时,不需要导包
-
其他情况都需要导包
-
如果同时使用两个包中的同名类,需要使用全类名
final
方法:当修饰方法的时候,表明该方法是最终方法,不能被重写
class Fu{
public final void show(){
System.out.println("123");
}
}
class Zi extends Fu{
@Override
public void show(){//这里是直接报错的
System.out.println("23");
}
}
}
类:表明该类是最终类,不能被继承
final class Fu{
}
class Zi extends Fu{
}//这里也是直接报错的
(以上两种自己写代码时候很少会使用,一般出现在源码里面,做了解)
变量:如果被final修饰也可以叫它常量,只能被赋值一次(需掌握)
举个栗子:圆周率就是使用final关键字修饰的
public static final double PI = 3.14159265358979323846;
常量:实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性
命名规范
-
单个单词:全部大写
-
多个单词:全部大写,单词之间用下划线隔开
细节
-
final修饰的变量是基本数据类型,那么变量储存的数据值不能发生改变
-
final修饰的变量是引用数据类型,那么变量储存的地址值不能发生改变,对象内部的可以改变
得出一个结论:这就是为什么字符串是不可变的
权限修饰符
修饰符 | 同一个类 | 同一个包中其他类 | 不同包下的子类 | 不同包下的无关类 |
---|---|---|---|---|
private | 是 | |||
默认(不写) | 是 | 是 | ||
protected | 是 | 是 | 是 | |
public | 是 | 是 | 是 | 是 |
作用范围:private<默认<protected<public
有一些小规则:
实际开发中,一般只用private和public
-
成员变量私有
-
方法公开
特例:如果方法中的代码是抽取其他方法中共性代码,这个方法一般也私有
抽象类和抽象方法
-
抽象方法:将共性的行为(方法)抽取到父类之后。由于每一个子类执行的内容是不一样的,所以,在父类中不能确定具体的方法体,该方法就可以定义为抽象方法。
-
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
抽象类的定义格式
public abstract class 类名{}
抽象方法的定义格式
public abstract 返回值类型 方法名 (参数列表);
public abstract class Person {
public abstract void work();
}
注意事项:
-
抽象类不能被实例化(也就是不能被创建对象)
-
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
-
可以有构造方法
-
抽象类的子类
要么重写抽象类中的所有抽象方法
要么子类本身是抽象类
案列
首先抽取公共属性,定义Animal类,然后定义抽象类 吃 这个行为
public abstract class Animal {
private String name;
private int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void drink(){
System.out.println("动物在喝水");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void eat();//此处是抽象方法
}
分别写出Frog,Sheep,Dog类
public class Frog extends Animal{
public Frog() {
}
public Frog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("青蛙吃虫子");
}
}
public class Sheep extends Animal{
public Sheep() {
}
public Sheep(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("山羊吃草");
}
}
public class Dog extends Animal{
public Dog() {
}
public Dog(String name, int age) {
super(name, age);
}
@Override
public void eat() {
System.out.println("狗吃骨头");
}
}
定义测试类
public class Test {
public static void main(String[] args) {
Frog f=new Frog("小绿",1);
System.out.println(f.getName()+","+f.getAge());
f.drink();
f.eat();
}
}
运行截图如上
总结
抽象类的作用是什么样的
-
抽取共性时,无法确定方法体,就把方法定义为抽象的。
-
强制让子类按照某种格式重写
-
抽象方法所在的类,必须是抽象类