抽象类
抽象类:使用abstract关键字修饰的类,叫做抽象类。
(不容易写方法体的方法,就不用写直接写抽象方法,让子类继承后,具体实现)
抽象方法
//抽象方法
修饰符 abstract 数据类型 方法名(参数列表);
用;号结束,不写具体的方法体
//抽象类
abstract class 类名{
}
抽象类和抽象方法的特点
- 抽象方法必须放在抽象类中!但抽象类中可以有普通方法
- 如果父类是抽象类,那么子类必须都重写父类的抽象方法
- 如果子类不重写父类全部抽象方法,可以将该子类也定义成抽象类
- 抽象方法实际上是定义的一个规则
- 抽象类不能实例化创建对象:因为抽象方法实现没有意义…
- 抽象类一定是一个父类。抽象类设计就是父类,子类去继承
- 抽象类不能和 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关键字
- final 用来修饰变量 该变量就是一个常量,经常和static一起使用,用来修饰变量,该变量就是静态常量;只能赋值1次。修饰符 static final 数据类型 变量名=值;
- final用来修饰方法,该方法只能被子类调用,不能重写
访问修饰符 final 返回值类型 方法名(){
//方法体
}
- 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();
}
}