共计 4709 个字符,预计需要花费 12 分钟才能阅读完成。
注释:
上一篇是《java 拜访权限和 javaObject》,敌人们了解得怎么样?这篇分享的是《Java 中 final 关键字的作用和 Java 抽象类》。
接下来开始明天的分享
Java 中 final 关键字的作用
- final 修饰字段, 在定义时必须显示初始化, 不能被批改, 个别与 static 同时应用, 所有字母都大写, 称为 final 常量
- final 润饰办法, 不能被笼罩(重写)
- final 润饰局部变量, 一旦初始化就不能再批改, 留神 final 润饰援用类型变量, 是指这个变量不能再指向 其余对象 , 能够批改它的字段值
- final 润饰办法形参, 在办法体中不能批改 final 参数的值
package com.bjpowernode.chapter01.demo04.p1;
/**
* 1) final 润饰类, 示意这个类是最终类, 不能被继承
* 如 System 类 /String 类就是应用 final 润饰的
* 当定义的类不想被别的类继承时, 就能够应用 final 润饰
* @author Administrator
*
*/
public final class Father {}
package com.bjpowernode.chapter01.demo04.p2;
/**
* 2) final 修饰字段
* final 字段必须初始化, 要么在定义时赋初值, 要么在构造方法中赋初值
* final 字段不能从新赋值
* 个别状况下,final 修饰字段时, 同时应用 static 一起润饰, 称为 final 常量 , 所有字母都大写
* @author Administrator
*
*/
public class Father2 {
int xx;
int yy = 20;
final int oo = 456; //final 字段在定义时显示初始化
final int zz; //final 字段在构造方法中显示初始化
final static double PI = 3.14; //final 常量
public Father2() {zz = 121;}
public void mm() {
xx = 123;
yy = 202;
// zz = 789; //he final field Father2.zz cannot be assigned
// oo = 369; //final 字段不能被从新赋值
}
}
package com.bjpowernode.chapter01.demo04.p3;
/**
* 3) final 润饰办法, 不 能被子类重写(笼罩)
* 留神: 子类能够继承到 final 办法, 只是不能重写
* @author Administrator
*
*/
public class Father3 {public void m1(int xx) {System.out.println("父类的实例办法, 能够子类笼罩");
}
public final void m2(int x, int y) {System.out.println("应用 final 润饰的办法, 不能被子类重写");
}
}
package com.bjpowernode.chapter01.demo04.p4;
import com.bjpowernode.chapter01.demo03.Book;
/**
* 4) final 润饰局部变量
* 一旦初始化实现, 就不能再从新赋值
* @author Administrator
*
*/
public class Test {public static void main(String[] args) {
// 定义局部变量
int x ;
x = 10;
int y = 20;
//final 润饰局部变量
final int z;
z = 30;
final int t = 40;
// 能够给局部变量从新赋值
x = 101;
y = 202;
// z = 303; // 不能给 final 局部变量从新赋值
//final 润饰援用类型变量
final Book book1 = new Book
//final 关键字润饰的是 book1 变量, 不能给 book1 变量从新赋值, 能够对象的字段值
// book1 = new Book
book1.name =
}
}
package com.bjpowernode.chapter01.demo04.p5;
/**
* 5) final 润饰办法形参
* final 形参不能被赋值
* @author Administrator
*
*/
public class Test {public static void main(String[] args) {m1(10, 20); // 在调用办法时, 给 final 形参初始化
}
public static void m1(int x, final int y) {
x = 101;
// y = 202; //final 形参不能被赋值
}
}
Java 抽象类
当一个类的某个操作没法具体实现时, 这个操作能够定义为形象办法。
形象办法应用 abstract 润饰的办法, 只有办法的申明局部, 没有办法体。
package com.wkcto.chapter01.abstracttest.demo01;
/**
* 定义立体图形 类
* 该类有对立体图形求面积, 求周长的操作
*
* 1) 当一个类的某个操作没法具体实现时, 这个操作能够定义为形象办法
* 2) 应用 abstract 润饰的办法为形象办法, 只有办法的申明, 没有办法体
* 3) 含有形象办法的类必须定义为抽象类
* @author
*
*/
public abstract class Graphics2d {
// 定义形象办法, 求面积
public abstract double getArea();
// 定义形象办法, 求周长
public abstract double getPerimeter();}
package com.wkcto.chapter01.abstracttest.demo01;
/**
* 定义矩形类
*
* 1) 子类继承了抽象类, 须要在子类中重写抽象类的形象办法
* @author
*
*/
public class Rectangle extends Graphics2d {
int width;
int height;
public Rectangle(int width, int height) {super();
this.width = width;
this.height = height;
}
@Override
public double getArea() {return width*height;}
@Override
public double getPerimeter() {return 2*(width+height);
}
}
package com.wkcto.chapter01.abstracttest.demo01;
/**
* 测试类,
* 定义一个办法, 能够显示任意立体图形的面积与周长
* @author
*
*/
public class Test {public static void main(String[] args) {
// 创立矩形 对象
Rectangle rect = new Rectangle(10, 5);
// 办法的形参 graphics2d 是一个父类援用, 在调用办法时, 能够传递子类对象
showInfo(rect);
// 创立圆形对象
Circle c1 = new Circle(10);
showInfo(c1);
}
// 定义一个办法, 能够显示任意立体图形的面积与周长
public static void showInfo(Graphics2d graphics2d) {System.out.println("立体图形的信息 ------------------");
System.out.println("面积:" + graphics2d.getArea());
System.out.println("周长:" + graphics2d.getPerimeter());
}
}
package com.wkcto.chapter01.abstracttest.demo01;
/**
* 定义三角形类
* 如果子类继承了抽象类, 没有重写所有的形象办法, 那么子类也须要定义为抽象类
* @author
*
*/
public abstract class Triangle extends Graphics2d {
int a;
int b;
int c;
@Override
public double getPerimeter() {return a+b+c;}
}
package com.wkcto.chapter01.abstracttest.demo01;
/**
* 测试抽象类的特点:
* 1) 只有应用 abtract 润饰的类就是抽象类
* 2) 含有形象办法的类必须定义 为抽象类, 然而, 抽象类中不肯定含有形象办法
* 有时, 对现有的类进一步形象造成更高层级的类(更形象的类), 如食物类, 动物类, 它们是没法实例化, 这种状况下, 能够定义为抽象类
* 3) 抽象类是一种援用数据类型, 能够定义变量, 然而抽象类不能实例化对象,
* 抽象类定义援用能够赋值子类对象
* 4) 抽象类必定含有构造方法, 子类创建对象时调用子类构造方法, 子类构造方法体执行前会先执行父类的构造方法
* 5) abstract 与 final 不能同时应用
* @author
*
*/
public class Test02 {public static void main(String[] args) {
// 应用抽象类定义一个变量
Graphics2d graphics2d;
// graphics2d = new Graphics2d();;//Cannot instantiate the type Graphics2d
Rectangle rectangle = new Rectangle(10, 5);
// 抽象类援用能够赋值子类对象
graphics2d = rectangle;
graphics2d = new Rectangle(5, 2);
}
}
练习: 客人喂养宠物, 宠物就卖萌
package com.wkcto.chapter01.abstracttest.demo02;
/**
* 宠物类
* 卖萌
* @author
*
*/
public abstract class Pet {
// 卖萌
public abstract void sellMeng() ;}
package com.wkcto.chapter01.abstracttest.demo02;
/**
* 小狗是宠物
* @author
*
*/
public class Dog extends Pet {
@Override
public void sellMeng() {System.out.println("汪汪汪~~~~");
}
}
package com.wkcto.chapter01.abstracttest.demo02;
/**
* 主人类
* @author
*
*/
public class Master {
// 喂宠物
public void feed(Pet pet) {
// 宠物卖萌
pet.sellMeng();}
}
package com.wkcto.chapter01.abstracttest.demo02;
/**
* 测试客人喂宠物, 宠物就卖萌
* @author
*
*/
public class Test {public static void main(String[] args) {Master xiaoxi = new Master();
Dog dog = new Dog();
xiaoxi.feed(dog);
Cat cat = new Cat();
xiaoxi.feed(cat);
}
}
大家能够本人练习下:
愤恨的小鸟, 红火 (红颜色的鸟) 能够失常航行 , 蓝冰 (蓝色彩的鸟) 能够一个变三个, 黄蜂 (黄色彩的鸟) 能够减速航行, 定义一个弹弓类, 有一个弹射的办法 , 能够把鸟给射出去, 鸟在飞。
- 下面就是《Java 中 final 关键字的作用和 Java 抽象类》。的分享,接下来为大家梳理《Java 接口和 Java 类与类之间的关系》。
- 也欢送大家交换探讨,该文章若有不正确的中央,心愿大家多多包涵。
- 你们的反对就是我最大的能源,如果对大家有帮忙给个赞哦~~~
正文完