final修饰类,让类绝育了(不能继承) 同一个包下不能定义两个一样的类,会冲突报错,类定义出来的变量是引用类型的变量(属于对象或类的,值在堆里面,栈内存存储的是地址) 引用类型的变量:栈内存是地址,堆内存是值
final修饰类:不能被继承
package com.itheima.d3_final;
public class Test {
public static void main(String[] args) {
// 目标:记住final的语法
// 1.final修饰类,类不能被继承(final最好修饰工具类,显得比较专业,因为工具类只要调用这个类(类名.方法),不要继承
// 2. final修饰方法,方法不能被重写
// 3. final修饰变量,总规则:变量有且仅能被赋值一次
}
}
//
//class Student extends People{
// @Override
// public void eat() {
// super.eat();
// System.out.println("学生吃的很多");
// }
//}
//
//
//class People{
// public final void eat(){ // final 在修饰这个方法时(写在public后面),这个方法不能重写
// System.out.println("人要吃东西~~");
// }
//}
//
//class wolf extends Animal{
//
//}
//
//final class Animal{ 这里使用了final之后,这个Animal就不能被继承
//}
final修饰变量:不能被第二次赋值
package com.itheima.d3_final;
public class Test2 {
// 二:修饰静态成员变量(public static final 修饰的也称为常量了) // final加了之后一定得赋值(final是写在变量类型前面)
public static final String schoolName = "黑马";
// 三:修饰实例成员变量(几乎不用) 因为实例成员变量是属于对象的,相当于写了final之后,该对象的变量写死了
public final String name = "猪刚烈";
public static void main(String[] args) {
// 目标:理解final修饰变量的作用:总规则:变量有且仅能被赋值一次,(理解语法)
// 变量有几种:
// 1.局部变量(写在方法里面的成员)
// 2.成员变量(一般是写在类里面,方法外)就是自己创建的类,如何定义成员变量
// -- 实例成员变量
// -- 静态成员变量
// 一:修饰局部变量
final double rate = 3.14;
// rate = 3.19; // 被final修饰了之后,只能被赋值一次,下次赋值就报错
buy(0.8); // 已经第一次赋值了
// schoolName = "黑马程序员"; // 第二次赋值
Test2 t = new Test2();
System.out.println(t.name); // 猪刚烈
// t.name = "天蓬元帅";
//注意:final修饰引用类型的变量,其地址不能被改变(不能被第二次赋值,但是指向的对象内容是可以改变的
final Teacher t2 = new Teacher("学习,授课,吹牛逼"); // 一般创建有参构造器后要加这个:this.hobby = hobby; //将传入的hobby赋值给对象的成员hobby
// t2 = null; // 将地址改为null(没加final之前)
// 加了final之后地址不能改变,可以改变对象指向的内容(堆内存中存储的东西)
}
//
// public static void buy(final double z){ // 这个形参被传参后就是第一次赋值,后面给变量赋值后属于第二次被赋值
//// z = 0.1;// 如果加了final不能被第二次赋值,
// }
}
class Teacher{
private String hobby;
public Teacher(String hobby) {
this.hobby = hobby; //将传入的hobby赋值给对象的成员hobby
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
}