什么是抽象?

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

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

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{@Overridepublic void play() {// TODO Auto-generated method stubSystem.out.println("大熊猫会和同类打闹");}@Overridepublic void eat() {// TODO Auto-generated method stubSystem.out.println("大熊猫吃竹子");}@Overridepublic void sleep() {System.out.println("大熊猫喜欢睡懒觉");}}
class Cat extends Animal {@Overridepublic void play() {// TODO Auto-generated method stubSystem.out.println("猫玩毛球");}@Overridepublic void eat() {// TODO Auto-generated method stubSystem.out.println("猫吃鱼");}@Overridepublic 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}@Overridepublic void play() {// TODO Auto-generated method stubSystem.out.println("雇员正在聚会");}public  final void sing() {this.play();System.out.println("并且唱起了歌");}@Overridepublic void InformationDisplay() {// TODO Auto-generated method stubSystem.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}@Overridepublic void play() {// TODO Auto-generated method stub//super.play();System.out.println("经理正在喝酒");}@Overridepublic 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可以修饰一个对象的引用

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

Java学习分享---【面向对象基础】抽象相关推荐

  1. Java学习日记1——基础认知

    Java学习日记1--基础认知 学习Java阶段,如果发现不正确的描述,还请指正! 首先附上Java相关下载链接和配置教程链接 Java相关软件工具下载地址:官方下载 Java环境配置(win10配置 ...

  2. Java学习笔记之基础篇

    Java学习笔记之基础篇 目录 Java如何体现平台的无关性? 面向对象(OO)的理解 面向对象和面向过程编程的区别 面向对象三大特征 静态绑定和动态绑定(后期绑定) 延伸:类之间的关系 组合(聚合) ...

  3. invader的java学习第一天基础篇

    invader的java学习第一天基础篇 一.java主要历史 ①java是Sun公司的产品,09年被Oracle公司收购. ②java语言之父:詹姆士高斯林 二.jdk.jre.jvm三者关系 jd ...

  4. Java学习07–前端基础之CSS

    Java学习07–CSS基础 1.CSS介绍 1.1.发展史 css1.0 基本 css2.0 div(块)+css html与css结构分离的思想网页变简单 css2.1 浮动,定位 css3.0 ...

  5. Java学习---Day16_IO流基础篇

    Java学习-Day16_IO流基础篇 文件操作 操作磁盘上的某一个文件或某一个文件夹,可以对他们进行创建或删除.移动.属性获取.属性设置等操作.但是,不包含读取文件的内容.拷贝文件 ps:java中 ...

  6. Java学习路线-夯实基础

    Java学习路线-夯实基础 第一部分:网络与操作系统 第二部分:数据结构与算法 第三部分:Java基础 第四部分:Java设计模式 第五部分:数据库 第六部分:Redis 第七部分:并发与多线程 第八 ...

  7. 深圳Java学习:面向对象【重点知识】

    深圳Java学习:面向对象[重点知识] 在Java的学习中,面向对象应该是Java技术的重中之重,虽然在生活中没有对象可以面对,但在技术中还是要一直接触面对对象,而且不可避免.今天千锋小编对面向对象来 ...

  8. java中的面向对象基础

    java中的面向对象基础 1.对象 #一切客观存在的事物都是对象,万物皆对象. #任何对象,一定具有自己的特征和行为. 2.类 (1)类的定义 (2)对象的创建 (3) 类与对象的关系 类:定义了对象 ...

  9. invader的java学习第二天基础篇

    invader的java学习第二天基础篇 一.深入了解第一个Hello World程序 public class Hello World{ public static void main(String ...

  10. JAVA学习之路--基础篇三

    目录 关于Java中从键盘输入的语句 nextxxx().next().nextLine()的区别 语句 if和if else语句 Switch语句 for语句 while和do..while bre ...

最新文章

  1. 更换yum的源为阿里云或者网易
  2. “崩溃!我再也不搞 AI 了”谷歌 AI 专家:别让你的方法打败你!
  3. The target you are trying to run requires an OpenSSL implementation.
  4. 机器人 林州重机_林州重机募资11亿布局油气和机器人项目
  5. mysql复杂查询示例_找到时间和内存复杂性之间的平衡-一个示例
  6. mysql索引的概念和作用_索引的基本概念及作用
  7. 如何将 png 图片转换为 eps ?
  8. 用python做一个输入半径值计算圆的面积保留两位小数_1063 计算谱半径 (20分)
  9. linux学习笔记整理
  10. HTML基础整理(From表单)
  11. 怎么样修改vlan从trunk到access模式,提示renew the default configurations
  12. 使用PGP加密软件实现电子邮件的安全传输
  13. UltraEdit 注册机
  14. 开源软件 商业软件_如何销售开源软件
  15. 华为交换机配置(一)
  16. 用c#开发Android应用(一)——搭建开发环境
  17. 机器学习【吴恩达|周志华|李宏毅|算法】清单
  18. 数据中心解决方案之灾备方案设计(下)
  19. 发布包到maven公共仓库图文教程(1) --- 注册账号和提交申请
  20. 安徽省省二c语言题库及答案,07_06省二级选择题题库C语言(含答案)

热门文章

  1. Legion 一款网络渗透工具
  2. SU战队专访:破而后立,晓喻新生
  3. (转)一个偷食禁果的女孩--一件我亲眼目睹的真实感人故事
  4. IDEA开发项目必备的几个查找功能的使用、查找整个项目文件内容(Find in Path)、查找某个文件名
  5. 安装及使用RSSHub
  6. websocket断开重连解决方案,基于子慕大诗人博客修改 健壮强化版
  7. 视频: 视频码率、分辨率、帧率、视频大小等
  8. html去除背景颜色怎么设置,文档底色怎么去掉【解决思路】
  9. 基础的重要性(程序员之路)
  10. HDU1728 BFS