Java 面向对象笔记四(abstract final 常用api改写)

本文介绍了抽象类和抽象方法的概念,强调了抽象方法必须在抽象类中定义,并且子类继承抽象类后需要重写抽象方法。通过示例展示了如何创建抽象类及其子类,并演示了final关键字的用法,包括修饰变量、方法和类。同时,讲解了Object类的常用API如toString()和equals()方法。最后,通过一个员工类的抽象层次结构案例,阐述了继承和抽象方法在实际编程中的应用。
摘要由CSDN通过智能技术生成

抽象类

抽象类:使用abstract关键字修饰的类,叫做抽象类。
(不容易写方法体的方法,就不用写直接写抽象方法,让子类继承后,具体实现)

抽象方法

//抽象方法
修饰符 abstract 数据类型 方法名(参数列表);;号结束,不写具体的方法体
//抽象类
abstract class 类名{
}

抽象类和抽象方法的特点

  1. 抽象方法必须放在抽象类中!但抽象类中可以有普通方法
  2. 如果父类是抽象类,那么子类必须都重写父类的抽象方法
  3. 如果子类不重写父类全部抽象方法,可以将该子类也定义成抽象类
  4. 抽象方法实际上是定义的一个规则
  5. 抽象类不能实例化创建对象:因为抽象方法实现没有意义…
  6. 抽象类一定是一个父类。抽象类设计就是父类,子类去继承
  7. 抽象类不能和 private final static 共存
//抽象父类
package com.m.demo7;

public abstract class Animal {
//		抽象方法
	public abstract void bark();
		
		
}
//子类1
package com.m.demo7;

public class Dog extends Animal {

	@Override
	public void bark() {
		System.out.println("汪汪汪");
		
	}
	
}
//子类2
package com.m.demo7;

public class Cat extends Animal{
	public void bark() {
		System.out.println("喵喵喵");
	}
}

//测试类
package com.m.demo7;

import java.util.Scanner;

public class Test {

	public static void main(String[] args) {
		new Dog().bark();
		new Cat().bark();
	}

}

在这里插入图片描述

final关键字

  1. final 用来修饰变量 该变量就是一个常量,经常和static一起使用,用来修饰变量,该变量就是静态常量;只能赋值1次。修饰符 static final 数据类型 变量名=值;
  2. final用来修饰方法,该方法只能被子类调用,不能重写
访问修饰符 final 返回值类型 方法名(){
//方法体
}
  1. final用来修饰类。该类不能被继承,但是可以继承别的类,可以成为子类。
访问修饰符 final class 类名{
}

Object类常用API

Object类是所有类的根类。

  • toString():返回该对象的字符串表示,默认是 打印 (system.out.print)出哈希地址。如果需要打印出内容,需要重写toString()。使用这个可以快速的打印出类的属性,方便打印。可以使用快捷键调用出来
    在这里插入图片描述
//Book
package com.m.demo9;

public class Book {
	public String ID;
	public String bookName;
	public String author;
	public int num;
	
	public Book(String iD, String bookName, String author, int num) {
		
		ID = iD;
		this.bookName = bookName;
		this.author = author;
		this.num = num;
	}

	@Override
	public String toString() {
		return ID + "\t" + bookName + "\t" + author + "\t" + num ;
	}
	
}

package com.m.demo9;

public class Test {

	public static void main(String[] args) {
		Book[] b=new Book[2];
		for(int i=0;i<2;i++) {
			b[i]=new Book("B001","西游记","吴承恩",45);
			System.out.println(b[i]);
		}

	}

}

在这里插入图片描述

  • equals:其他对象是否与此对象相等。源码是比较引用类型,对象的哈希地址。字符串的比较是比较哈希地址值和字符串的内容。如果需要比较内容,则需重写,定义自己的规则。将Object向下转型…也可以用快捷键实现。
    在这里插入图片描述

  • hashCode():返回对象的哈希码值

综合案例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.m.demo10;

public abstract class Employee {
	public  String ID;
	public  String name;
	public Employee(String iD, String name) {
		super();
		ID = iD;
		this.name = name;
	}
	
}

package com.m.demo10;

public abstract class Developer extends Employee {
	public Developer(String iD, String name) {
		super(iD, name);
		// TODO Auto-generated constructor stub
	}

	public abstract void work();

	
}

package com.m.demo10;

public abstract class Manintainer extends Employee {

	public Manintainer(String iD, String name) {
		super(iD, name);
		// TODO Auto-generated constructor stub
	}
	public abstract void work();

}

package com.m.demo10;

public class Android extends Developer {

	public Android(String iD, String name) {
		super(iD, name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.printf("员工号为%s的%s员工,正在研发淘宝手机客户端\n",super.ID,super.name);
	}

}

package com.m.demo10;

public class Hardware extends Manintainer {

	public Hardware(String iD, String name) {
		super(iD, name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.printf("员工号为%s的%s员工,正在修复硬件打印机\n",super.ID,super.name);

	}

}

package com.m.demo10;

public class JavaEE extends Developer {

	public JavaEE(String iD, String name) {
		super(iD, name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void work() {
		// TODO Auto-generated method stub
		System.out.printf("员工号为%s的%s员工,正在研发淘宝网站\n",super.ID,super.name);
		
	}

}

package com.m.demo10;

public class Network extends Manintainer {

	public Network(String iD, String name) {
		super(iD, name);
		// TODO Auto-generated constructor stub
	}

	@Override
	public void work() {
		System.out.printf("员工号为%s的%s员工,正在检查网络是否畅通\n",super.ID,super.name);

		
	}

}

package com.m.demo10;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new Android("123", "abc").work();
		
	}

}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值