抽象方法

抽象方法

南楼画角 提交于 2019-11-27 00:07:08
抽象类 通用的东西放到一块,写一个父类 不同的东西各个子类自己来实现 1、抽象类不能实例化对象 2、抽象类存在的目的是为了让子类继承 3、抽象类的定义和普通类的定义一样,只不过前面加了一个关键字,abstract 4、抽象类里面都要有抽象方法,抽象方法是用来让子类实现的,而且子类必须实现,不实现就报错 5、抽象方法只能是public或者protected 6、抽象方法如果有参数,参数有默认值,那么实现该方法的时候参数和默认值也都要有 7、抽象类可以继承抽象类,子类在实现的时候所有的抽象方法都得实现 来源: https://www.cnblogs.com/rjbc/p/11336122.html

Java 面向对象(十五)

独自空忆成欢 提交于 2019-11-26 23:14:28
Lambda表达式 1. 函数式编程思想概述 在数学中, 函数 就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法, 强调做什么,而不是以什么形式做 。 面向对象的思想: 做一件事情,找一个能解决这个事情的对象,调用对象的方法,完成事情。 函数式编程思想: 只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不重视过程。 2. 冗余的代码 【例1】传统写法 当需要启动一个线程去完成任务时,通常会通过 java.lang.Runnable 接口来定义任务内容,并使用 java.lang.Thread 类来启动该线程。代码如下: public class DemoRunnable { public static void main(String[] args) { // 匿名内部类 Runnable task = new Runnable() { @Override public void run() { // 覆盖重写抽象方法 System.out.println("多线程任务执行!"); } }; new Thread(task).start(); // 启动线程 } } 本着“一切皆对象”的思想,这种做法是无可厚非的

Java的继承、封装和多态

时光总嘲笑我的痴心妄想 提交于 2019-11-26 22:02:54
Java的继承、封装和多态 一、封装 1、概念: 2、好处: 3、封装的实现步骤 二、继承 1、概念: 2、继承的好处: 3、语法规则: (1)方法的重写 (2)final关键字: (3)super关键字 (4)Object类 三、多态 1.引用多态 2.方法多态 A.引用类型转换 B.抽象类 C.接口 一、封装 1、概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。 2、好处: 实现了专业的分工 良好的封装能够减少耦合 类内部的结构能够自由修改 可以对成员进行更精确的控制 隐藏信息,实现细节 3、封装的实现步骤 1)将属性私有化,设为private类型 2)对所有私有属性创建Getters和Setters方法 public class Circle { private double radius; public final double getRadius() { return radius; } public final void setRadius(double radius) { this.radius = radius; } } 二、继承 1、概念: 继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一个父类

Java学习历程十《多态,接口,内部类》

馋奶兔 提交于 2019-11-26 21:59:09
文章目录 Java的多态 向上转型 向下转型 抽象类 问题 接口 interface 内部类 成员内部类<普通内部类> 静态内部类 方法内部类 匿名内部类 Java的多态 多种形态,同一种方式在不同的场景中得到不同的结果. 编译时多态[少部分] 通过方法的重载实现 运行时多态[大部分] 决定了调用哪个类里边定义的方法 多态的必要条件: 满足继承关系 父类应用执行子类对象 设计: Animal: name month eat() getName() getMonth() getWeight() Cat: -> Animal weight eat() run() Cat() Dog: -> Animal sex eat() sleep() Dog() 向上转型 Animal package com . animal ; public class Animal { private String name ; private int month ; public Animal ( ) { } public Animal ( String name , int month ) { this . setName ( name ) ; this . setMonth ( month ) ; } public String getName ( ) { return name ; } public

java开发中/final关键字/多态/抽象类/接口/形式参数与返回值/内部类/匿名内部类知识梳理

醉酒当歌 提交于 2019-11-26 21:56:47
一,final关键字 1. final修饰类,该类不能被继承, 2. final修饰成员方法,该方法不能重写. 3. final修饰类的成员变量,该变量的值不能改变, 4. final修饰局部变量: a,若该局部变量的类型为基本数据类型,该变量的值不能被改变. b,若该变量的类型为引用类型,那么它不能再次被分配堆内存空间,但是该变量的值可以改变. #当final修饰变量时,需要在对象创建创建之前进行初始化这个值: a,构造代码块中进行初始化 b,构造方法中进行初始化 c,定义成员变量的时候,可以直接进行初始化. 注意:这三种方式只能同时使用一种. #final修饰局部变量的综合应用: package Day_08_01; public class FinalXiuShi { int age ; public static void main(String[] args) { /* int n=100; n=200; System.out.println(n);*/ final int n =100; /*n=200;*/ // 该变量被 final 修饰 , 其值不会发生改变 /*System.out.println(n); System.out.println("---------------");*/ /* FinalXiuShi fl =newFinalXiuShi();

Java的继承与多态

半世苍凉 提交于 2019-11-26 21:55:45
继承 面向对象的三大特征:封装性、继承性、多态性。 继承是多态的前提,如果没有继承,就没有多态。 变量的访问: 局部变量:直接写成员变量名 本类的成员变量:this.成员变量名 父类的成员变量:super.成员变量名 在父子类的继承关系中,创建子类对象,访问成员方法的规则: 创建的对象是谁,就优先用谁,如果没有则向上找。 注意事项:无论是成员方法还是成员变量,如果没有都是向上找父类,绝对不会向下找子类。 重写(Override):在继承关系中,方法的名称一样,参数列表也一样。也叫覆盖、覆写。 方法的覆盖重写特点:创建的是子类对象,则优先用子类方法。 方法覆盖重写的注意事项: 1.必须保证父子类间方法的名称相同,参数列表也相同。 @Override:写在方法前面,用来检测是不是有效的正确覆盖重写。 这个注解就算不写,只要满足要求,也是正确的方法覆盖重写。 2.子类方法的返回值必须小于等于父类方法的返回值范围。 3.子类方法的权限必须大于等于父类方法的权限修饰符。 public > protected > (default) > private 备注:(default)不是关键字default,而是什么都不写,留空。 覆盖重写的应用场景: super关键字的用法有三种: 1.在子类的成员方法中,访问父类的成员变量。 2.在子类的成员方法中,访问父类的成员方法。 3.在子类的构造方法中

23种设计模式(3):抽象工厂模式

女生的网名这么多〃 提交于 2019-11-26 21:24:24
定义: 为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。 类型: 创建类模式 类图: 抽象工厂模式与工厂方法模式的区别 抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。 在抽象工厂模式中,有一个 产品族 的概念:所谓的产品族,是指 位于不同产品等级结构中功能相关联的产品组成的家族 。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。我们依然拿生产汽车的例子来说明他们之间的区别。 在上面的类图中,两厢车和三厢车称为两个不同的等级结构;而2.0排量车和2.4排量车则称为两个不同的产品族。再具体一点,2.0排量两厢车和2.4排量两厢车属于同一个等级结构,2.0排量三厢车和2.4排量三厢车属于另一个等级结构;而2.0排量两厢车和2.0排量三厢车属于同一个产品族,2.4排量两厢车和2.4排量三厢车属于另一个产品族。 明白了等级结构和产品族的概念,就理解工厂方法模式和抽象工厂模式的区别了

小白之旅9

久未见 提交于 2019-11-26 17:35:56
〇. 匿名对象 概念:创建对象时,不指名对象名 好处:书写简便 弊端:只能使用一次 一. 抽象类 1.1 概念 抽象方法:当父类只知道子类应该具有哪些方法,而不能准确的定义子类该如何具有实现这些方法时,这些就是抽象方法。 抽象类:具有抽象方法的类就是抽象类 1.2 格式 1、抽象方法: public abstract 返回类型 方法名 (参数列表); 2、抽象类: public abstract class 类名 {} 1.3 特点 抽象类和抽象方法都需要被abstract修饰 抽象方法必须在抽象类中 抽象类中可以没有抽象方法 抽象类不能创建对象,因为调用抽象方法是没有意义的 1.4 如何使用抽象类 1、创建子类继承抽象类 2、重写父类的所有抽象方法 子类继承抽象类后,必须重写方法,否则子类中也具有抽象方法,子类也就变成了抽象类 3、创建子类对象,调用方法 1.5 注意 抽象类一定是一个父类 抽象类中可以有非抽象方法,这些方法不仅是子类的共性方法,而且每个子类的实现步骤和细节都相同 当子类具有共性方法,而每个子类的具有实现都各不相同时,可以将子类的这些方法抽取到父类中,形成抽象方法,从而这个父类也就是一个抽象类了 1.6 匿名创建抽象类的子类对象 格式: new 父类名(参数){ // 重写父类方法 public void 方法名 (参数){ // 方法体 } }; 二. 接口

面向对象【三大特性】

我的未来我决定 提交于 2019-11-26 17:18:58
封装 安全隐患: 属性不私有化(可以直接操作成员属性,就有可能出现不合规范[不安全]的情况) { Student01 stu=new Student01("张三",10,"男"); //直接操作成员属性-->赋值 stu.name="季凤萍"; //stu.age=-5;} 属性私有化关键字: Private 私有的---à成员修饰符 如果一个成员属性一旦私有,只能在当前类中使用,其他的类无权访问|操作 [private int age;] 属性一旦私有 : 需要提供公共的访问方式 设置器(设置私有属性的值)setter 访问器(获取私有属性的值)getter-->(方法) 快捷键: //alt+shift+s-->r-->tab-->enter-->shift+tab-->enter { //age的设置器 //返回值:不需要 参数:需要 public void setAge(int age){ if(age>0 && age<=150){ this.age = age; }else{ System.out.println("年龄不合法!!!"); } //age的访问器 //返回值:需要 返回值int age 参数:不想要 public int getAge(){ return age; }} 私有状态下相对较安全: 1.属性不允许直接操作 2.间接操作在方法中可以进行逻辑判断

Lambda表达式

僤鯓⒐⒋嵵緔 提交于 2019-11-26 16:40:22
Lambda表达式 ​ Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)的实例。 一、表达式入门 先观察下段代码 Comparator<String> com = new Comparator<String>(){ @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length()); } }; TreeSet<String> ts = new TreeSet<>(com); 该段代码采用匿名内部类方式去创建了一个Comparator对象,并实现了compare方法。但是该段代码中,最关键的代码其实就一行: Integer.compare(o1.length(), o2.length()); 。 使用Lambda表达式解决上述问题: Comparator<String> com = (x, y) -> Integer.compare(x.length(), y.length()); TreeSet<String> ts = new TreeSet<>(com); 该句 (x, y) -> Integer.compare