zoukankan      html  css  js  c++  java
  • Java抽象类

    Java可以创建一种类专门用来当做父类,这种类称为“抽象类”。

    “抽象类”的作用类似“模板”,其目的是要设计者依据它的格式来修改并创建新的类。但是不能直接由抽象类创建对象,只能通过抽象类派生出新的类,再由它来创建对象。

    抽象类的定义及使用规则:

    <1>包含一个抽象方法的类必须是抽象类

    <2>抽象类和抽象方法都要使用abstract关键字声明

    <3>抽象方法只需声明而不需要实现

    <4>抽象类必须被子继承、子类(如果不是抽象类)必须覆写抽象类中的全部抽象方法

    抽象类不能使用final关键字声明,因为使用final关键字声明的类不能被子类所继承

    抽象方法不要使用private声明,因为使用private声明了就不能被子类覆写

    一个抽象类中可以定义构造方法

    //=================================================
    // File Name       :	abstract_demo
    //------------------------------------------------------------------------------
    // Author          :	Common
    
    
    // 类名:A
    // 属性:
    // 方法:
    abstract class A{
    	public static final String FLAG = "CHINA";
    	private String name = "张三";
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	public abstract void print();		//定义一个抽象方法
    }
    
    //类名:B
    //属性:
    //方法:
    class B extends A{					//继承抽象类,覆写全部的抽象方法
    	public void print(){
    		System.out.println("FLAG="+FLAG);
    		System.out.println("姓名="+super.getName());
    	}
    }
    
    //主类
    //Function        : 	abstract_demo
    public class abstract_demo {
    
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		B b = new B();
    		b.print();
    	}
    
    }
    

    假设人分为学生和工人,学生和工人可以说话,但是学生和工人说话的内容不一样,使用抽象类实现这样一个场景

    //=================================================
    // File Name       :	ploy_up_demo
    //------------------------------------------------------------------------------
    // Author          :	Common
    
    // 类名:People
    // 属性:
    // 方法:
    abstract class People{
    	private String name;
    	private int age;
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getAge() {
    		return age;
    	}
    	public void setAge(int age) {
    		this.age = age;
    	}
    	
    	public People(String name, int age) {	//构造函数
    		this.name = name;
    		this.age = age;
    	}
    	
    	public void say(){									
    		System.out.println(this.getContent());
    	}
    	
    	public abstract String getContent();	//get方法,说话的内容由子类决定
    	
    }
    
    //类名:Student
    //属性:
    //方法:
    class Student extends People{
    	
    	private float score;
    	
    	public Student(String name, int age,float score) {
    		super(name, age);					//调用父类的构造方法
    		// TODO 自动生成的构造函数存根
    		this.score = score;
    	}
    
    	@Override
    	public String getContent() {		//覆写父类中的get抽象方法
    		// TODO 自动生成的方法存根
    		return "学生信息-->姓名:"+super.getName()+"年龄:"+super.getAge()+"成绩:"+this.score;
    	}
    	
    }
    
    //类名:Worker
    //属性:
    //方法:
    class Worker extends People{
    	
    	private float salary;
    	
    	public Worker(String name, int age,float salary) {
    		super(name, age);					//调用父类的构造方法
    		// TODO 自动生成的构造函数存根
    		this.salary = salary;
    	}
    
    	@Override
    	public String getContent() {		//覆写父类中的get抽象方法
    		// TODO 自动生成的方法存根
    		return "工人信息-->姓名:"+super.getName()+"年龄:"+super.getAge()+"薪水:"+this.salary;
    	}
    	
    }
    
    public class abstract_demo2 {
    
    	public static void main(String[] args) {
    		// TODO 自动生成的方法存根
    		Student stu = new Student("张三",18,99.0f);
    		Worker wor = new Worker("张三",18,1000.0f);
    		stu.say();
    		wor.say();
    	}
    
    }
    
  • 相关阅读:
    进阶 | 手把手教你模拟键盘和鼠标操作ActionChains
    做web自动化时,定位元素常用方法有哪些?
    C# 自定义控件无法查看视图设计:文件中的类都不能进行设计,因此未能为该文件显示设计器
    Windows Server时间服务器配置方法
    MySQL 8.0主从(MasterSlave)配置
    VMware VSphere Client克隆虚拟机
    VMware vSphere Client给虚拟机增加硬盘
    nginx负载+mysql8.0双主实现
    Java
    关于awvs和nessus的api的说明
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/5238611.html
Copyright © 2011-2022 走看看