目录
final应用举例
一、final 关键字
1. final(最终的)
final变量:
- final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。
- 被 final 修饰的实例变量必须显式指定初始值(即不能只声明)。
- final 修饰符通常和 static 修饰符一起使用来创建类常量。
final 方法:
- 父类中的 final 方法可以被子类继承,但是不能被子类重写。
- 声明 final 方法的主要目的是防止该方法的内容被修改。
final类:
final 类不能被继承,没有类能够继承 final 类的任何特性。
- 所以无论是变量、方法还是类被final修饰之后,都有代表最终、最后的意思。内容无法被修改。
- 在java中声明类、变量和方法时,可以用关键字final来修饰,表示“最终的”。
final修饰的类不能被继承,提高安全性和可读性。
System类、StringBuffer类
final修饰的方法不能被子类重写
Object类中的getClass方法
final修饰的变量称为常量(常量名全大写),只能被赋一次值。
final应用举例
public final class Test02 {
public static int totalNum = 20;
public final int ID;
public Test02() {
ID = ++totalNum; // 可在构造器中给final修饰的“变量”赋值
}
public static void main(String[] args) {
Test02 t = new Test02();
System.out.println(t.ID);
final int A = 30;
final int C;
C = 20;
// J = 30; // 非法
}
}
2. Object类概述
Object是类层次结构的根类,所有的类都隐式的继承自Object类。
Java所有的对象都拥有Object默认方法
Object类的构造方法有一个,并且是无参构造
- Object是java所有类的父类,是整个类继承结构的顶端,也是最抽象的一个类。
- 像toString()、equals()、hashCode()、wait()、notify()、getClass()等都是Object的方法。
**toString()**方法表示返回该对象的字符串,由于各个对象构造不同所以需要重写,如果不重写的话默认返回
类名@hashCode
格式。
如果重写toString()方法后直接调用toString()方法就可以返回我们自定义的该类转成字符串类型的内容输出,而不需要每次都手动的拼凑成字符串内容输出,大大简化输出操作。
**equals()方法主要比较两个对象是否相等,因为对象的相等不一定非要严格要求两个对象地址上的相同,有时内容上的相同我们就会认为它相等,比如String 类就重写了euqals()**方法,通过字符串的内容比较是否相等。
3.小案例
/*
定义宠物类( Pet ),猫类(Cat)和狗类(Dog)
1、宠物都有属性姓名(name)和年龄(age)
2、宠物都有吃(eat)、喝(drink)、叫(shout)的方法
3、猫有爬树( climbTree )的方法
4、狗有警戒( police)的方法
*/
public class Pet {
private String name;
private String age;
public Pet(){}
public Pet(String name, String age) {
this.name = name;
this.age = age;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getAge() { return age; }
public void setAge(String age) { this.age = age; }
public void eat(){
System.out.println("宠物吃");
}
public void drink(){
System.out.println("宠物喝");
}
public void shout(){
System.out.println("宠物叫");
}
}
class Cat extends Pet{
String name="灰灰";
String age="3";
public void eat(){
System.out.println("猫吃鱼");
}
public void drink(){
System.out.println("猫喝水");
}
public void shout(){
System.out.println("喵喵喵");
}
public void climbTree(){
System.out.println("猫爬树");
}
}
class Dog extends Pet{
String name="大白";
String age="4";
public void eat(){
System.out.println("狗吃肉");
}
public void drink(){
System.out.println("狗喝水");
}
public void shout(){
System.out.println("汪汪汪");
}
public void police(){
System.out.println("狗警戒");
}
}
class PetTest{
public static void main(String[] args) {
Cat cat=new Cat();
cat.eat();
cat.drink();
cat.shout();
cat.climbTree();
Dog dog=new Dog();
dog.eat();
dog.drink();
dog.shout();
dog.police();
}
}
/*定义银行卡和信用卡类
银行卡类
>有余额属性和存钱、取钱方法
信用卡类
>继承银行卡类
>有透支额度属性(初始1000)
>重写取款方法
测试类中分别使用两种卡完成存取款操作。
*/
import com.sun.xml.internal.ws.api.model.wsdl.WSDLOutput;
public class Yinhangka {
static double balance=1000;
public void add(double money) {
balance+=money;
System.out.println("存款成功,余额为"+balance);
}
public void send(double money) {
if(balance>=money){
balance-=money;
System.out.println("取款成功,余额为"+balance);
}
else {
System.out.println("余额不足,取款失败");
}
}
}
class XYK extends Yinhangka {
public double tz = 1100;
public void add(double money) {
balance+=money;
System.out.println("存款成功,余额为"+balance);
}
public void send(double money) {
balance-=money;
if (balance>=0){
System.out.println("取款成功,余额为"+balance+" "+"透支额为"+tz);
}else if (balance<0&&balance>-1000){
System.out.println("取款成功,余额为"+0.0+" "+"透支额为"+(tz+balance));
}else
System.out.println("超过透支金额,取款失败");
}
static class Test {
public static void main(String[] args) {
Yinhangka y = new Yinhangka();
XYK x = new XYK();
y.add(100);
System.out.println("用银行卡取700");
y.send(700);
System.out.println("用银行卡取1000");
y.send(1000);
System.out.println("用信用行卡存100");
x.add(100);
System.out.println("用信用卡取200");
x.send(200);
System.out.println("用信用卡取1000");
x.send(1000);
}
}
}
二、心得体会
今天的这两个小案例,都能自己写出来了,还是有进步的!!!就是坐的腰疼~_~