Java学习分享---【面向对象基础】抽象

本文详细介绍了Java中的抽象类和抽象方法,包括它们的定义、语法格式和注意事项。同时,通过示例展示了如何创建和使用抽象类。此外,还探讨了final关键字的用法,如修饰成员变量、方法和类,以及其在防止重写和修改中的作用。
摘要由CSDN通过智能技术生成

什么是抽象?

复杂来讲:“抽取关键相关特性(属性和方法)构成对象,用程序的方法逻辑和数据结构 属性模拟现实的世界对象”

简单地说:“抽象只从正确的角度,透露对象的某些相关细节。”

Java中的抽象类

 概述:

在面向对象编程的过程中,所有的对象都可以通过类来创建,但是,并不是所有的类都可以创建对象,如果一个类中没有足够完整的信息来描述具体对象的话,那么这个类叫抽象类

abstract关键字 

作用:

abstract修饰的类叫抽象类

abstract修饰的方法叫抽象方法

abstract只能修饰类和方法

语法格式:

[public] abstarct class 类名{

    //普通方法:
    public void 方法名(){
        方法体;
    }
    //抽象方法
    public abstarct void 方法名(); // 注意:没有方法体
}

// 如果一个类中存在抽象方法,那么该类就必须声明为抽象类 ***

 注意事项:

1.用abstract来修饰的类叫抽象类

2.可以有普通成员方法和抽象成员方法

3.抽象方法没有方法体,是不完整的方法

4.抽象类不能被实例化 抽象类不能被实例化 抽象类不能被实例化 所以 5

5.使用普通类去继承抽象类,然后重写抽象方法或成员方法

6.在子类中一定去实现(重写)抽象类中所有的抽象方法

7.非抽象方法可以重写也可以不重写

8.抽象类可以继承抽象类

9.抽象类可以继承非抽象类(普通类)

示例1:

abstract class Animal{
	public abstract void play();
	public abstract void eat();
	public void sleep() {
		System.out.println("动物会睡觉");
	}
}
class Panda extends Animal{

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("大熊猫会和同类打闹");
	}

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("大熊猫吃竹子");
	}
	@Override
	public void sleep() {
		System.out.println("大熊猫喜欢睡懒觉");
	}
	
}
class Cat extends Animal {

	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("猫玩毛球");
	}

	@Override
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("猫吃鱼");
	}
	@Override
	public void sleep() {
		System.out.println("小猫喜欢在白天睡觉");
	}
	
}
public class Test01 {

	public static void main(String[] args) {
		Panda panda = new Panda();
		Cat cat = new Cat();
		panda.eat();
		panda.play();
		panda.sleep();
		cat.eat();
		cat.play();
		cat.sleep();
	}
}
//输出结果:

大熊猫吃竹子
大熊猫会和同类打闹
大熊猫喜欢睡懒觉
猫吃鱼
猫玩毛球
小猫喜欢在白天睡觉

 示例2

//抽象角色类
abstract class Role { // 角色

	private String name;
	private int age;
	private char sex;
	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 char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	//抽象play方法
	public abstract void play();
	//构造方法
	public Role() {
		this("王二狗", 18, '男');//this关键字调用本类有参构造方法
	}
	public Role(String name, int age, char sex) {
		//super();
		//this(); 如果去掉无参中的this则可在有参中使用
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	//抽象信息展示方法
	public abstract void InformationDisplay();
	
}

//雇员类
class Employee extends Role{
	private double salary;
	
	public void setSalary(double salary) {
		this.salary = salary;
	}
	public double getSalary() {
		return salary;
	}
	
	public Employee(double salary) {
		super();
		this.salary = salary;
	}


	public Employee() {
		super(); //super关键字调用父类无参构造方法
		// TODO Auto-generated constructor stub
	}

	public Employee(String name, int age, char sex) {
		super(name, age, sex); // super关键字调用父类有参构造方法
		// TODO Auto-generated constructor stub
	}

	


	@Override
	public void play() {
		// TODO Auto-generated method stub
		System.out.println("雇员正在聚会");
	}
	public  final void sing() {
		this.play();
		System.out.println("并且唱起了歌");
	}
	@Override
	public void InformationDisplay() {
		// TODO Auto-generated method stub
		System.out.println("姓名:" + super.getName() + "  年龄:" + super.getAge() + "  性别:" + super.getSex() + "  月薪资:" + this.getSalary());
	}

}

//经理类
class Manager extends Employee{ // 经理继承于雇员

	final String vehicle = "私家车";

	public Manager() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Manager(double salary) {
		super(salary);
		// TODO Auto-generated constructor stub
	}

	public Manager(String name, int age, char sex) {
		super(name, age, sex);
		// TODO Auto-generated constructor stub
	}
	@Override
	public void play() {
		// TODO Auto-generated method stub
		//super.play();
		System.out.println("经理正在喝酒");
	}
	@Override
	public void InformationDisplay() {
		// TODO Auto-generated method stub
		//super.InformationDisplay();
		System.out.println("姓名:" + super.getName() + "  年龄:" + super.getAge() + "  性别:" + super.getSex() + "  月薪资:" + this.getSalary()+" 交通方法:"+this.vehicle);
	}	
}

//测试类
public class Test {

	public static void main(String[] args) {
		//
		Employee employee = new Employee();
//		employee.setName("王荆川");
//		employee.setAge(26);
//		employee.setSex('男');
		employee.setSalary(18327.6);
		employee.InformationDisplay();
		employee.play();
		employee.sing();
		//
		Employee employee2 = new Employee("刘非明",24,'男');
		employee2.setSalary(28327.6);
		employee2.InformationDisplay();
		employee2.sing();
		//
		Manager manager = new Manager("李经理",39,'男');
		manager.setSalary(50000.00);
		manager.InformationDisplay();
		manager.play();
	}
}
//输出结果:
姓名:王二狗  年龄:18  性别:男  月薪资:18327.6
雇员正在聚会
雇员正在聚会
并且唱起了歌
姓名:刘非  年龄:24  性别:男  月薪资:28327.6
雇员正在聚会
并且唱起了歌
姓名:李经理  年龄:39  性别:男  月薪资:50000.0 交通方法:私家车
经理正在喝酒

final关键字

 用法:

1.final可以修饰成员变量

使用final修饰的成员变量一定要赋值(初始化),且不能修改

 2.final可以修饰局部变量

修饰局部变量时,可先对变量不赋值,使用之前进行赋值,一旦赋值无法更改

3.final可以修饰成员方法

 final修饰的成员方法不能被重写 ,在继承关系中

4.final可以修饰一个类

 final修饰的类不能被继承

5.final可以修饰一个对象的引用

修饰对象引用 一旦被赋值 就无法改变(内存地址锁定)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值