注释:
上一篇是《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类与类之间的关系》。
- 也欢送大家交换探讨,该文章若有不正确的中央,心愿大家多多包涵。
- 你们的反对就是我最大的能源,如果对大家有帮忙给个赞哦~~~
发表回复