一. 多态在实际开发中的作用?
1.降低程序的耦合度,提高程序的扩展里。
2.能使用多态尽量使用多态。
3.父类型引用指向子类型对象
核心:面向抽象编程,尽量不要面向具体编程
应用实例:
1)程序的入口:主函数
public class Test {
public static void main(String[] args) {
//创建主人对象
Master zhangsan=new Master();
//创建猫对象
Cat tom=new Cat();
//主人喂养猫
zhangsan.feed(tom);
//zhangsan.feed(new Cat());
//创建小狗对象
Dog erHa=new Dog();
//主人喂小狗
zhangsan.feed(erHa);
//zhangsan.feed(new Dog());
}
}
2)主人类
public class Master {
//Master主人类面向的是一个抽象的Pet,不再面向具体的宠物
//提倡:面向抽象编程,不要面向具体编程
//面向抽象编程的好处,耦合度低,扩展力强
public void feed(Pet pet){
pet.eat();
}
}
3)宠物类
public class Pet {
//宠物可以吃东西
public void eat(){
}
}
4)小猫类
public class Cat extends Pet{
public void eat(){
System.out.println("小猫在吃鱼!");
}
}
5)小狗类
public class Dog extends Pet{
public Dog(){
System.out.println("小狗在吃肉!");
}
}
二.关于Java语言当中final关键字:
1.final是一个关键字,表示最终的,不可变的。
2.final修饰的类无法被继承。
3.final修饰的方法无法被覆盖。
4.final修饰的变量一旦赋值之后,不可重新赋值。
5.final修饰的实例变量,必须手动赋值,不能采用系统默认值。
6.final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收。
7.final修饰的实例变量,一般和static联合使用,被称为常量。
样例1:
public class Main {
//成员变量之实例变量
//实例变量有默认值+final修饰的变量一旦赋值不能重新赋值
//综合考虑,Java语言最终规定实例变量使用final修饰之后,必须手动赋值,不能采用系统默认值。
//final int age;//编译错误
//第一种解决方案
final int age=10;
//第二种解决方案
final int num;
public Main(){
this.num=200;
}
//以上的两种解决方案:其实本质上就是一种方式,都是在构造方法执行过程当中给实例变量赋值。
public static void main(String[] args) {
final int a;
a=100;
//不可第二次赋值
//a=200;
System.out.println(a);//100
Main s=new Main();//访问实例变量,先创建对象,再访问
System.out.println(s.age);//10
System.out.println(s.num);//200
}
}
样例2:
public class Main {
public static void main(String[] args) {
int i=10;
System.out.println(i);//10
i=20;
System.out.println(i);//20
final int k=100;
//编译错误:无法为最终变量k分配值
//k=200;
System.out.println(k);//100
final int m;
m=200;
//编译错误:无法为最终变量m分配值
//m=300;
System.out.println(m);//200
}
}
样例3:
public class Main {
public static void main(String[] args) {
//创建用户对象
User u=new User(100);//User u=0x1234;
System.out.println(u.id);//100
//又创建了一个新的User对象
//程序执行到此处表示以上对象已变成垃圾数据,等待垃圾回收器的回收。
u=new User(200);
System.out.println(u.id);//200
//创建用户对象
final User user=new User(30);
//User=new User(50);//final修饰的引用,一旦指向某个对象之后,不能再指向其它对象,那么被指向的对象无法被垃圾回收器回收。
System.out.println(user.id);//30
user.id=50;//final修饰的引用虽然指向某个对象之后不能指向其他对象,但是所指向的对象内部的内存是可以被修改的。
System.out.println(user.id);//50
}
}
样例4:
public class Main {
public static void main(String[] args) {
System.out.println(Chinese.GUO_JI);
}
}
//中国人
class Chinese{
//国籍
//需求:每一个中国人的国籍都是中国,而且国籍不会改变,为了防止国籍被修改,建议加final修饰。
//final修饰的实例变量是不可变的,这种变量一般和static联合使用,被称为"常量"
//常量的定义语法格式:
// public static final 类型 常量名 = 值
//java规范中要求所有常量的名字全部大写,每个单词之间使用下划线连接
public static final String GUO_JI = "中国";
}
样例5:
public class Main {
public static void main(String[] args) {
System.out.println(Math.PI);
}
}
//圆周率
class Math{
public static final double PI=3.1415926;
}



