final(最终)
final关键字要注意的细节 :
1. final关键字修饰一个基本类型变量时, 该变量不能重新赋值。
2. final关键字修饰一个引用类型变量时,其引用重新指向新的对象。
3. final修饰一个方法时,该方法不能被重写。
4. final修饰一个类的时候,该类不能被继承。
常量的修饰符: public static final.
常量命名规范: 所有字母大写,单词与单词之间使用下划线分隔 。
abstract不能与以下关键字配合使用:
1. abstract 不能与private配合使用。
2. abstract 不能与final关键字配合使用。
3. abstract 不能与static关键字配合使用。
//需求: 描述一个圆 。
final class Circle{
double r;
public static final double PI = 3.14; // 常量
//构造函数
public Circle(double r){
this.r = r;
}
public Circle(){}
public final void getArea(){
System.out.println("面积是:"+ PI*r*r);
}
}
class Demo3
{
public static void main(String[] args)
{
final Circle c = new Circle(3.0);
print(c);
}
public static void print(final Circle c){
//c = new Circle(4.0); // c指向了新的对象。
}
abstract(抽象)
使用了关键词abstract声明的类叫作“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。
抽象类的应用场景:
描述一类事物的时候,发现该事物确实存在着某种行为,但是目前该行为是不具体的,
那么这时候我们应该抽取该方法的声明,不去实现该方法,这时候我们应该使用抽象类。
抽象类要注意的细节:
1. 如果一个方法没有方法体,那么该方法必须使用abstract修饰。
2. 如果一个类有抽象的方法,那么该类也必须使用abstract修饰。
3. 非抽象类继承抽象类的时候,必须要把抽象类中的所有抽象方法全部实现。
4. 抽象类可以定义抽象方法以及非抽象方法。
5. 抽象类是可以不存在抽象方法的。
6. 抽象类不能创建对象。
疑问: 为什么抽象类不能创建对象呢?
因为抽象类一旦创建了对象就可以使用对象去调用方法了,一旦调用了抽象方法就没有任何的意义了。
7. 抽象类是存在构造方法的。
疑问:既然抽象类不能创建对象,那么存在构造方法的意义在那?
抽象类的构造方法是留给子类调用初始化从父类继续下去的成员变量的。
需求:描述一个动物、狗、鸟三个类。
问题:
1. 动物类的run方法描述得有问题。
2. 没有强制子类一定要重写run方法。
abstract class Animal{
String name;
String color;
public Animal(String name,String color){
this.name= name;
this.color = color;
}
//非抽象方法
public void sleep(){}
//移动... 抽象方法
public abstract void run();
}
//狗
class Dog extends Animal{
public Dog(String name,String color){
super(name,color);
}
//咬人
public void bite(){
System.out.println(name+"在狠狠的咬小贼");
}
public void run(){
System.out.println(name+"四条腿跑得很快..");
}
}
class Bird extends Animal{
public Bird(String name,String color){
super(name,color);
}
public void fly(){
System.out.println(name+"在飞翔...");
}
public void run(){
System.out.println(name+"两条腿跑得很悠闲..");
}
}
class Demo {
public static void main(String[] args)
{
/*
Dog d = new Dog("牧羊犬","棕色");
d.bite();
d.run();
Bird b = new Bird("麻雀","灰色");
b.fly();
b.run();
*/
Animal a = new Animal("动物","彩色");
}
}
}