package com.atguigu.java;
/** Abstract关键字的使用:* 1.abstract:抽象的* 2.abstract可以用来修饰:类、方法* * 3.abstract 修饰类:抽象类* >此类不能实例化* >抽象类中一定有构造器,便于子类对象实例化的时候使用(子类对象实例化的全过程)* >在开发中,都会提供抽象类的子类,让子类对象实例化,完成相关的操作* * * 4.abstract 修饰方法:抽象方法* >抽象方法只有方法的声明没有方法体。* >包含抽象方法的类,一定是一个抽象类。反之,抽象类中是可以没有抽象方法的。* >若子类重写了父类中 所有 的抽象方法后,此子类方可实例化*   若子类没有重写父类中 所有 的抽象方法,则此子类也是一个抽象类,需要使用abstract修饰一下。* * */
public class AbstractTest {public static void main(String[] args) {//一旦person类抽象了,就不能再实例化了!
//      Person p1  = new Person();
//      p1.eat();}
}
abstract class Person{String name;int age;public Person(){}public Person(String name,int age){this.age = age;this.name = name;}//不是抽象方法
//  public void eat(){
//
//  }//抽象方法:public abstract void eat();public void walk(){System.out.println("人走路");}
}class Student extends Person{public Student(){}public Student(String name,int age){this.age = age;this.name = name;}public void eat(){System.out.println("学生多吃有营养的食物");}}
package com.atguigu.java;
/** abstract使用上的注意点:* 1.abstract不能用来修饰:属性、构造器等结构* 2.abstract不能用来修饰:私有方法(不能被重写)、* 静态方法(重写的都是非static的)、 以及final修饰的类和方法*/
public class AbstractTest1 {}
package com.atguigu.java;/** 抽象类的应用:模板方法的设计模式*/
public class TemplateTest {public static void main(String[] args) {SubTemplate t = new SubTemplate();t.spendTime();}
}abstract class Template {// 计算某段代码执行所需要花费的时间public void spendTime() {long start = System.currentTimeMillis();this.code();// 不确定的部分、易变的部分,就抽象一下,然后子类再去确定long end = System.currentTimeMillis();System.out.println("花费时间:" + (end - start));}// 抽象方法:必须存在在抽象类中,子类必须重写public abstract void code();
}class SubTemplate extends Template {@Overridepublic void code() {for (int i = 0; i <= 1000; i++) {boolean isFlage = true;for (int j = 2; j <= Math.sqrt(i); j++) {if (i % j == 0) {isFlage = false;break;}}if (isFlage) {System.out.println(i);}}}
}
package com.atguigu.java1;/** 接口的使用* 1.接口使用interface来定义* 2.Java和类是并列的结构* 3.如何定义接口:定义接口的成员* *      3.1 JDK7及以前:*                        只能够去定义全局常量和抽象方法*                    >全局常量:public static final的,但是书写时是可以省略的,但是仍然存在。*                    >抽象方法:public abstract,但是书写时是可以省略的,但是仍然存在。* *      3.2 JDK8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法。*      * 4.接口中是不能定义构造器的!意味着接口是不能实例化的。* * 5.Java开发中,既然不能实例化,接口通过让类去实现(implements)的方式来使用。* 如果实现类覆盖了接口中的所有抽象方法,那么这个实现类就可以实例化了* 但是如果实现类不能覆盖所有的抽象方法,则此实现类仍为抽象类,也就不能实例化。* * 6.Java类可以实现多个接口----->弥补了Java单继承性的局限性* 格式:class AA extends BB implements CC,DD,MM{*     *             }*             * 7.接口和接口之间可以继承,而且可以多继承* * ********************************************************************** * 8.接口的具体使用,体现多态性!* * 9.接口实际上可以看作一种规范!* * */
public class InetrfaceTest {public static void main(String[] args) {System.out.println(Flyable.MAX_SPEED);// 直接通过接口调用,体现的是静态(static)System.out.println(Flyable.MIN_SPEED);// 直接通过接口调用,体现的是静态(static)// Flyable.MAX_SPEED = 8;会报错,体现的是finalPlane p = new Plane();p.fly();}
}interface Attackable {void attack();//省略了
}interface Flyable {// 全局常量:public static final int MAX_SPEED = 7900;// 第一宇宙速度int MIN_SPEED = 1;// 抽象方法:public abstract void fly();void stop();
}class Plane implements Flyable {@Overridepublic void fly() {System.out.println("通过引擎起飞");}@Overridepublic void stop() {System.out.println("驾驶员减速降落");}
}class Kite implements Flyable {@Overridepublic void fly() {}@Overridepublic void stop() {}
}
class Bullet extends Object implements Flyable,Attackable,CC{public void attack() {}public void fly() {}public void stop() {    }@Overridepublic void method1() {// TODO Auto-generated method stub}@Overridepublic void method2() {// TODO Auto-generated method stub}
}
//**********************************
interface AA{void method1();
}
interface BB{void method2();
}
//多继承
interface CC extends AA,BB{}
package com.atguigu.java1;/** 接口的应用:代理模式 * */
public class NetWorkTest {public static void main(String[] args) {ProxyServer proxyServer = new ProxyServer(new Server());proxyServer.browse();}
}// 接口
interface NetWork {public void browse();}// 被代理,真实的服务器
class Server implements NetWork {@Overridepublic void browse() {System.out.println("连接服务器");}}class ProxyServer implements NetWork {private NetWork work;public ProxyServer(NetWork work) {// 构造器,给属性初始化this.work = work;}public void check() {System.out.println("检查网络问题");}@Override // 真正地去联网的是服务器public void browse() {check();work.browse();}}

第二章:Java面向对象:抽象(abstract)类、模板方法设计模式、接口(interface)、关键字-implements(实现)、代理模式相关推荐

  1. 零基础入门 自学 JAVA SE 基础篇(九)instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface)

    JAVA SE自学 基础篇 多态 instanceof final 开闭原则 多态 抽象(abstract)方法与抽象类 接口(interface) 目标 父类型与子类型之间的转换及instanceo ...

  2. 使用java实现面向对象编程第二章_java面向对象编程——第二章 java基础语法

    第二章 java基础语法 1.java关键字 abstract boolean break byte case catch char class const continue default do d ...

  3. java语言定义一个具备栈功能的类_Java学习笔记 第二章 Java语言基础

    第二章 JAVA语言基础 一.关键字 1.关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词 特点:关键字中所有的字母都为小写 2.用于定义数据类型的关键字 c;ass  interface ...

  4. 第4章 - Java面向对象

    第4章- Java面向对象 10 包 (basic.facobj.pack.PackageDemo) 1).对类文件进行分类管理     2).给类提供多层命名(名称)空间    3).写在程序文件的 ...

  5. java 3D 第二章 java 3D基本概念

    java 3D 第二章 java 3D基本概念 java 3D基本概念 java 3D的包及其功能 java 3D 高分辨率大尺度坐标 Java 3D场景图(Scene Graph) VirtualU ...

  6. 描述java源程序构成_Java第二章Java程序设计

    <Java第二章Java程序设计>由会员分享,可在线阅读,更多相关<Java第二章Java程序设计(140页珍藏版)>请在人人文库网上搜索. 1.第2章 Java基本语法,2. ...

  7. (Java零基础学习笔记)第二章 Java中的基本语法

    前言: 大家好! 我是BA unravel .如果你想和我一起学习JAVA,欢迎大家一起来学习这个世界上最好的语言! 学习目标: 一周掌握 Java 入门知识 学习内容: 1. 搭建 Java 开发环 ...

  8. 八、Java面向对象编程(类、对象、方法、重载、可变参数、作用域、构造器、this本质)

    文章目录 Java面向对象编程(类.对象.方法.重载.可变参数.作用域.构造器.this本质) 一.类与对象 1. 类与对象的引出 2. 使用现有技术解决 3. 现有技术解决的缺点分析 4. 类与对象 ...

  9. 【JAVA SE】第二章 Java语法基础、数据类型、基本类型的字面值、基本类型的类型转换和运算规则

    第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符命名风格 文章目录 第二章 Java语法基础.数据类型.基本类型的字面值.基本类型的类型转换.运算规则和标识符 ...

  10. 第二章 java常用开发工具以及程序的编写

    2019独角兽企业重金招聘Python工程师标准>>> 第二章 java常用开发工具以及程序的编写 1. 程序的概念         2. java程序的开发的三个步骤        ...

最新文章

  1. 第二十章:异步和文件I/O.(十一)
  2. 学术与技术(与队长交流偶得)
  3. 【NOSQL ]】 redis 安装
  4. 生成随机长度字符串,比如密码等
  5. [html] 你知道短链接的生成原理吗?
  6. java学习(96):线程的睡眠
  7. php要懂函数吗,九个你需要知道的PHP函数和功能
  8. 为什么有些小区业主不愿意交物业费?
  9. 前端性能优化—js代码打包 1
  10. Android开发之EditText属性详解
  11. 全栈工程师是什么,为什么需要全栈工程师?
  12. 反悔贪心 + 优先队列:PIPI的逃跑路线Ⅳ
  13. win10便签常驻桌面_便签,草图,截屏草图,一个win10自带的小工具统统解决!...
  14. ubuntu系统强制解锁
  15. 中国蒸汽眼罩市场销售趋势及营销渠道策略报告(新版)2022-2027年
  16. 基于FPGA的视频图像拼接融合(附源码)。
  17. pycharm选择虚拟环境
  18. 用js给html添加样式
  19. 网易企业邮箱:给国外公司发邮件用什么邮箱?
  20. 展望未来 :今后十年可能诞生的21个新工作

热门文章

  1. 改变linux字体的大小,如何更改字体并调整其大小?
  2. 关于游戏性的概念和实物
  3. Facebook想要成为下一个微信,难!
  4. 2018年的人工智能和深度学习将会如何发展?
  5. python day46
  6. BigDecimal舍入模式(Rounding Modes)
  7. Excel日期加斜杠,日期时间戳互转
  8. 云脉档案管理系统助力档案信息化建设
  9. Python——pyqt5的计算器(源码+打包)
  10. 单商户商城系统功能拆解47—应用中心—自定义海报