08_抽象_接口_final关键字_多态

头歌平台Java实验:Java面向对象 - 封装、继承和多态 就是隐藏对象的属性和实现细节,仅对外提供公共访问方式。对于封装而言,一个对象它所封装的是自己的属性和方法,所以它是不需要依赖其他对象就可以完成自己的操作。良好的封装能够减少耦合。类内部的结构可以自由修改。可以对成员进行更精确的控制。隐藏信息,实现细节。封装把一个对象的属性私有化,同时提供一些可以被外界访问属性的方法,如果不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。编程要求根据提示,在右侧编辑器Begin-End。 阅读详情

第一章.抽象

1.抽象的介绍

1.抽象类怎么形成:
   在父类中的方法无法做具体实现,需要延伸到子类中做具体实现
此时该方法定义成抽象方法,抽象方法所在的类一定是抽象类
2.抽象类定义:  abstract
   public abstract class 类名{}
3.抽象方法定义: abstract
   权限修饰符 abstract 返回值类型 方法名(形参);
4.使用:
   a.定义子类,继承抽象父类
   b.重写抽象方法,做具体实现
   c.创建子类对象(抽象类不能new对象),调用重写的方法
5.问题:
   继承是为了少写代码,后来我们继承完之后又设计了一个抽象父类
我们还得必须重写里面的抽象方法,好像我们并没有少写代码,那为啥还要用抽象呢?

   可以将抽象类的抽取看成是一类事物的"标准",只要是属于这一类的,必须拥有这些功能,怎么拥有呢?重写,至于具体怎么实现,重写之后自己去实现
6.抽象是代码的一种设计思想,可用可不用,我们后面自己开发的时候
基本上碰不上自己定义抽象类,抽象类都是底层的继承体系的顶级父类
public abstract class Animal {
    public abstract void eat();
    public abstract void drink();
}
public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃屎");
    }

    @Override
    public void drink() {
        System.out.println("狗用舌头卷着喝水");
    }
}

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    @Override
    public void drink() {
        System.out.println("舔水喝");
    }
}

public class Test01 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.eat();
        dog.drink();

        System.out.println("===================");
        Cat cat = new Cat();
        cat.eat();
        cat.drink();
    }
}

2.抽象的注意事项

1.抽象类不能直接new对象,只能创建非抽象子类的对象
2.抽象类中,可以有构造方法,是供子类创建对象时,初始化父类中属性使用的
3.抽象类中可以有成员变量,构造,成员方法
4.抽象类中不一定非得有抽象方法,但是有抽象方法的类一定是抽象类
5.抽象类的子类,必须重写父类中的所有抽象方法,否则,编译无法通过.除非该子类也是抽象类
public abstract class Employee {
    private String name;
    private int age;

    public Employee() {
    }

    public Employee(String name, int age) {
        this.name = name;
        this.age = 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 abstract void work();
}

public class Teacher extends Employee{
    public Teacher() {
    }

    public Teacher(String name, int age) {
        super(name, age);
    }

    @Override
    public void work() {
        System.out.println("涛哥在讲课");
    }
}
public class Test01 {
    public static void main(String[] args) {
        Teacher t1 = new Teacher("涛哥", 18);
        System.out.println(t1.getName()+"..."+t1.getAge());
        t1.work();//重写的
    }
}

第三章.接口

1.接口的介绍

2.接口的定义以及使用

1.接口:一种标准,一种规范
2.定义接口:
   public interface 接口名{}
3.实现:定义实现类实现接口
   public class 实现类类名 implements 接口名{}
4.使用:
  a.创建实现类实现接口
  b.重写抽象方法
  c.创建实现类对象(接口不能new对象的),调用重写的方法
5.成员:
  a.jdk8之前:
    抽象方法:固定public abstract开头,不写也有
    成员变量:固定public static final开头,不写也有
  b.jdk8开始:
    默认方法:public default 返回值类型 方法名(形参){
                          方法体        
                          return 结果
                   }
    静态方法:和之前的带static的方法一样

   c.jdk9:
     私有方法,将public 改成private
public interface USB {
    public abstract void open();
    public abstract void close();
}
public class Mouse implements USB{
    @Override
    public void open() {
        System.out.println("鼠标打开了");
    }

    @Override
    public void close() {
        System.out.println("鼠标关闭了");
    }
}
public class KeyBoard implements USB{
    @Override
    public void open() {
        System.out.println("键盘打开");
    }

    @Override
    public void close() {
        System.out.println("键盘关闭");
    }
}
public class Test01 {
    public static void main(String[] args) {
        Mouse mouse = new Mouse();
        mouse.open();
        mouse.close();

        KeyBoard keyBoard = new KeyBoard();
        keyBoard.open();
        keyBoard.close();

    }
}

3.接口中的成员

3.1抽象方法

1.格式:
  public abstract 返回值类型 方法名(形参);
2.特点:
  不写public abstract 默认也有
3.使用:
  通过实现类的重写去使用
public interface USB {
    public abstract void open();
    String close(String name);
}

public class Mouse implements USB{
    @Override
    public void open() {
        System.out.println("鼠标打开了");
    }

    @Override
    public String close(String name) {
        return name+"关闭了";
    }
}

public class Test01 {
    public static void main(String[] args) {
        Mouse mouse = new Mouse();
        mouse.open();
        String result = mouse.close("鼠标");
        System.out.println(result);
    }
}

3.2默认方法

1.格式:
  public default 返回值类型 方法名(形参){
      方法体
      return 结果
  }

2.使用:
  a.定义实现类实现接口
  b.在实现类中可重写可不重写
  c.创建实现类对象,调用默认方法    
public interface USB {
    /**
     * 默认方法
     */
    public default void methodDef(){
        System.out.println("默认方法");
    }
}
public class Mouse implements USB{
/*    @Override
    public void methodDef(){
        System.out.println("重写的默认方法");
    }*/
}

public class Test01 {
    public static void main(String[] args) {
        Mouse mouse = new Mouse();
        mouse.methodDef();
    }
}

3.3静态方法

1.格式:
  public static 返回值类型 方法名(形参){
      方法体
      return 结果
  }
2.使用:
  接口名直接调用
public interface USB {
    /**
     * 静态方法
     */
    public static void methodSta(){
        System.out.println("静态方法");
    }
}
public class Test01 {
    public static void main(String[] args) {
       USB.methodSta();
    }
}

默认方法和静态方法的使用有啥意义:

将来我们开发都是面向接口编程–>都是先定义一个接口,这个接口相当于是"功能的大集合",接口中定义的都是我们要实现的功能,然后在具体的实现类中实现,但是如果我们要临时加一个小功能,这个小功能不需要几行代码,此时我们就没必要在接口中定义抽象方法了,再去实现类中实现了,所以我们就可以在接口中直接定义默认方法或者静态方法,在接口中直接实现了就完事了!

3.4.成员变量

1.格式:
  public static final 数据类型 变量名 = 值
2.特点:
  不写public static final 默认也有
3.注意:
  a.接口中的成员变量需要直接手动赋值
  b.被public static final修饰的变量,变量名需要全大写(习惯)
public interface USB {
    public static final int NUM1 = 100;
    int NUM2 = 200;
}
public class Test01 {
    public static void main(String[] args) {
        System.out.println(USB.NUM1);
        System.out.println(USB.NUM2);
    }
}

3.5.私有方法

1.格式:
  将接口中的静态方法和普通方法的pubilc改成private
public interface USB {
    private static void methodPri(){
        System.out.println("私有的静态方法");
    }

    public static void methodSta(){
        methodPri();
    }
}

public class Test01 {
    public static void main(String[] args) {
        USB.methodSta();
    }
}

特殊语法: 接口名.super.方法名()

public class 实现类 implements 接口A,接口B{

​ public void method(){

​ 接口名.super.方法名()

​ }

}

public interface 接口A{

​ default void method(){

​ }

}

public interface 接口B{

​ default void method(){

​ }

}

4.接口的特点

1.接口可以多继承
  pubilc interface A extends 接口B,接口C{}
2.接口可以多实现
  public class A implements 接口B,接口C{}
3.一个子类可以继承一个父类的同时实现一个或者多个接口
  public class Zi extends Fu implements 接口B,接口C{}

当一个类实现多个接口时,如果接口中的抽象方法有重名且参数一样的,只需要重写一次

public interface InterfaceA {
    void methodAbs();
}
public interface InterfaceB {
    void methodAbs();
}
public class InterfaceImpl implements InterfaceA, InterfaceB {

    @Override
    public void methodAbs() {
       
    }
}

当一个类实现多个接口时,如果默认方法有重名的,参数一样,默认方法必须要重写一次

public interface InterfaceA {
    public default void method(){
        System.out.println("接口A的默认方法");
    }
}
public interface InterfaceB {
    public default void method(){
        System.out.println("接口B的默认方法");
    }
}
public class InterfaceImpl implements InterfaceA, InterfaceB{
    @Override
    public void method() {
        //特殊语法-> 接口名.super.方法名
        InterfaceA.super.method();
    }
}

5.接口和抽象类的区别

相同点:
  a.都位于继承的顶端,用于被其他类实现或者继承
  b.都不能new
  c.都包含抽象方法,其子类都必须重写这些抽象方法

不同点:
  a.抽象类:一般作为父类使用,可以有成员变量,构造,成员方法,抽象方法等
  b.接口:成员单一,一般抽取接口,抽取的都是方法,是功能的大集合
  c.类不能多继承,接口可以

第四章.final关键字

1.概述:代表的是最终的,最后的
2.使用:
  修饰一个类
  修饰一个方法
  修饰一个成员变量
  修饰一个局部变量
  修饰一个对象
      
3.怎么学final:
  知道以上成员被final修饰之后的特点

1.修饰类

1.格式:
  public final class 类名{}
2.特点:
  被final修饰的类,不能被继承
public /*final*/ class Animal {
}
public class Dog extends Animal{
}

2.修饰方法

1.格式:
  修饰符 final 返回值类型 方法名(形参){
      方法体
      return 结果
  }

2.特点:
  a.被final修饰的方法不能被重写
3.注意:
  final和abstract不能连起来使用
public /*final*/ class Animal {
    public /*final*/ void eat(){
        System.out.println("吃吃吃");
    }

    //public abstract final void drink();
}
public class Dog extends Animal{
    public void eat(){
        System.out.println("狗啃骨头");
    }
}

3.修饰成员变量

1.格式:
  final 数据类型 变量名 = 值
2.特点:
  被final修饰的变量,不能二次赋值
public class Person {
    final String name = "张三";
    /*public Person(String name){
        this.name = name;
    }*/
}

4.修饰局部变量

1.格式:
  final 数据类型 变量名 = 值
2.特点:
  被final修饰的变量,不能二次赋值
public class Test01 {
    public static void main(String[] args) {
        final int i = 10;
        //i = 20;
        System.out.println(i);
    }
}

5.修饰对象

1.格式:
  final 类名 对象名 = new 类名()
2.特点:
  被final修饰的对象地址值不能改变,但是对象的属性值可以改变
public class Student {
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = 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 class Test02 {
    public static void main(String[] args) {
        final Student s1 = new Student("张三", 10);
        System.out.println(s1);

        //s1 = new Student("李四", 20);
        s1.setName("王五");
        System.out.println(s1.getName()+"..."+s1.getAge());
    }
}

第五章.权限修饰符

1.概述:在java中,有四种权限修饰符
  public:公共的访问权限,被public修饰的成员在哪里都能使用
  protected:受保护的
  默认:成员变量和方法前面的权限修饰符啥也不用,不写
  private:私有的,只能在本类中使用
publicprotected默认private
同类yesyesyesyes
同包不同类yesyesyesno
不同包子父类yesyesnono
不同包非子父类yesnonono
如果不考虑特殊情况,我们应该这么使用权限修饰符
  1.成员变量 -> 建议用private,封装思想
  2.构造方法 -> 建议用public,便于new对象
  3.方法 -> 建议用public,便于调用

第六章.多态

1.面向对象三大特征:  封装    继承    多态

1.多态的介绍

1.前提:
  a.必须有子父类继承关系或者接口实现关系
  b.必须有方法的重写(没有方法的重写,多态没有任何意义)
  c.new对象需要:父类引用指向子类对象   ->  Fu fu = new Zi()  
      
2.怎么学多态:不要从字面上来学
  a.学多态的前提
  b.怎么写代码就是多态了
  c.用多态有啥好处      

2.多态的基本使用

public abstract class Animal {
    public  abstract void eat();
}
public class Dog extends Animal{
    @Override
    public void eat() {
        System.out.println("狗吃屎");
    }

    //子类特有功能
    public void lookHome(){
        System.out.println("狗看家");
    }
}

public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    //特有方法
    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}
public class Test01 {
    public static void main(String[] args) {
        //原始方式
        Dog dog = new Dog();
        dog.eat();
        dog.lookHome();
        System.out.println("===================");
        Cat cat = new Cat();
        cat.eat();
        cat.catchMouse();

        System.out.println("===================");

        //多态方式
        Animal animal = new Dog();//好比是double b = 10
        animal.eat();
        //animal.lookHome();//多态前提下,不能直接调用子类特有功能

        Animal animal1 = new Cat();
        animal1.eat();
    }
}
public interface USB {
    public abstract void open();
    public abstract void close();
}

public class Mouse implements  USB{
    @Override
    public void open() {
        System.out.println("鼠标打开");
    }

    @Override
    public void close() {
        System.out.println("鼠标关闭");
    }

    //特有功能
    public void click(){
        System.out.println("鼠标点击");
    }
}

public class Keyboard implements  USB{
    @Override
    public void open() {
        System.out.println("键盘打开");
    }

    @Override
    public void close() {
        System.out.println("键盘关闭");
    }

    //特有方法
    public void input(){
        System.out.println("键盘输入");
    }
}

public class Test02 {
    public static void main(String[] args) {
        USB usb = new Mouse();
        usb.open();
        usb.close();
        //usb.click();//多态前提下不能直接调用子类特有功能
        System.out.println("===================");
        USB usb1 = new Keyboard();
        usb1.open();
        usb1.close();
    }
}

3.多态的条件下成员的访问特点

3.1成员变量

public class Fu {
    public int num = 10;
}
public class Zi extends Fu{
    public int num = 100;
}
public class Test01 {
    public static void main(String[] args) {
        Fu fu = new Zi();
        System.out.println(fu.num);
    }
}

看等号左边是谁,先调用谁中的成员变量

3.2成员方法

public class Fu {
    public int num = 10;
    public void show(){
        System.out.println("Fu...");
    }
}
public class Zi extends Fu{
    public int num = 100;
    public void show(){
        System.out.println("Zi...");
    }
}
public class Test01 {
    public static void main(String[] args) {
        Fu fu = new Zi();
        System.out.println(fu.num);
        fu.show();
    }
}
看new的是谁,先调用谁中的方法,子类没有找父类
⚡【C++要笑着学】(27) 多态:重写(覆盖) | 协变构多态 | 父虚子非虚也构多态 | final与override关键字(C++11) | 抽象类 | 纯虚函数 | 抽象类指针 本章我们继续讲解面向对象三大特性,上一章我们讲解了继承,本章我们讲解多态。从多态的概念一步步讲解,介绍构成多态的必要条件和两个例外。还会顺带讲解一下 C++11 更新的两个和多态有关系的关键字 final 和 override。上一章我们讲解了虚函数,本章会先补充纯虚函数的概念,然后再引入抽象类的概念。本章我们只学习C++多态的基础知识,至于多态的原理(VTBL、决议等)的难度相对较大,我们单独放到下一章去做专门讲解。...... 阅读详情

相关推荐

Bode图、ABCD矩阵与EET结合:三步搞定复杂电路传递函数分析

在模拟电路与电源控制设计中,传递函数和频率响应是衡量系统稳定性的核心指标。Bode图以直观的幅频/相频曲线揭示带宽与相位裕度,ABCD二端口矩阵可将级联网络结构化表达,而EET额外元素定理则针对寄生电容、负载效应等局部修正提供显式公式。三者互补,组合成一套从整体拓扑到局部寄生修正的完整分析方法:先用ABCD搭建主体网络,再用EET快速加入额外元件,最后用Bode图验证传递函数和稳定裕度。该方法适用于滤波器设计、电源环路补偿、运放稳定性分析等线性小信号场景,支持Python/SciPy和SPICE交叉验证,显

weixin_32496547的博客 362

07 -- 08. Java学习 -- 继承、抽象类、final关键字、接口与多态

继承:子类使用父类的方法多态:父类使用子类的方法**继承的定义格式:**public class 父类{... ...public class 子类 extends 父类 {... ...继承关系下,父类公有的属性和方法都会被子类共享。/*例子:*/// 父类System.out.println("姓名:" + this.name + " 年龄:" + this.age);// 子类 extends继承的关键字// 测试类cat.name = "橘猫";

ACDBBB的博客 1014

SenseVoice 实测,阿里开源语音大模型,识别效果和效率优于 Whisper,居然还能检测掌声、笑声!5分钟带你部署体验

阿里开源语音大模型:语音识别效果和性能强于 Whisper,还能检测掌声、笑声、咳嗽等

u010522887的专栏 4万+

【Java零基础连载08】面向对象核心下篇|多态、抽象类、接口、代码块、final关键字

上一篇我们吃透了OOP继承体系核心,掌握了继承、this&super关键字、方法重写、重载与重写区别等核心知识点,彻底打通了面向对象第二大特性——继承。本篇作为面向对象连载终章多态,同时精讲抽象类、接口、三大代码块、final关键字五大高频核心知识点,一次性补齐所有OOP短板。至此,封装、继承、多态三大特性全部学完,Java面向对象完整知识体系正式收官,后续所有集合、框架、进阶语法都基于本篇内容拓展,零基础务必吃透!读完本篇,你将彻底掌握:多态核心原理、实现条件、编译运行机制。

荏苒夕阳的博客 354

C# 死锁:原理、诊断与解决方案深度解析

本文深入探讨了C#中的死锁问题,详细介绍了死锁的基本概念、形成机制、常见场景、诊断方法及解决方案。死锁通常发生在多线程环境下,当多个线程因争夺资源而互相等待时,导致程序无法继续执行。文章通过代码示例展示了常见的死锁场景,如锁的嵌套、同步上下文死锁和线程池死锁,并提供了使用Visual Studio、WinDbg等工具进行死锁诊断的方法。此外,文章还提出了多种预防和解决死锁的策略,包括保持锁顺序一致性、使用锁超时机制、避免同步阻塞异步代码以及使用更高级的同步原语。通过这些方法,开发者可以有效减少死锁的发生,提

记录学习的过程 1407

DDR3性能优化实战:如何用Xilinx MIG控制器实现800MHz稳定读写(7系列FPGA版)

本文深入探讨了在Xilinx 7系列FPGA上使用MIG控制器实现DDR3存储器800MHz稳定高速读写的实战优化技巧。文章聚焦于高级时序调优、Bank Machine调度策略、用户接口设计优化以及利用ILA进行信号完整性调试,旨在帮助工程师突破性能瓶颈,实现接近理论峰值的稳定带宽,并为进一步冲刺更高频率提供进阶调参指南。

seed的博客 775

java基础-第六章 继承、多态、抽象类、接口

前面介绍了面向对象中类和对象的概念以及如何将数据放到类和对象中(封装),本章将继续介绍三大特性中继承和多态的概念。以及如何使用抽象类和接口来约束类。有时我们的某些方法(功能)在父类中并不会定义其具体的实现功能,而是只想表示有这个功能,具体实现交给子类完成,这样的功能(方法)没有方法体,叫抽象方法,拥有抽象方法的类叫抽象类。用abstract关键字来修饰抽象类和抽象方法。接口是为了解决抽象类的一个弊端出现的。抽象类的弊端:抽象类中的某些抽象方法,对于某子类而言是不需要的,但该子类却必须继承并重写。

m0_74606902的博客 796

stc8g1k08硬件iic读取aht20温湿度及0.91寸oled显示

使用stc8g1k08读取aht20温湿度及0.91寸oled显示。

qq_61688416的博客 2770

web day02 多态,抽象类,接口

而且我们可以很轻松的利用People p1=new Student(),People p2=new Teaxhert()的方式来将不同的子类进行形式上的统一,方便后续进行调用。接口里的方法默认时abstract,不能有方法体,一个类可以继承多个接口,并要实现接口里的所有方法,因此特性可以被用于做成开发中的一种规范。用来修饰方法时,所在的类必须为abstract类,并且如果有类继承了此类,那么就要实现这个类当中的所有继承方法。简单的说就是父类的方法每一个子类都可以有其自己的表达方式。4.然后就涉及到模版。

m0_65018431的博客 223

Open3D (C++) KD tree的使用【2025最新版】

Open3D (C++) KD tree的使用,博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 1566

2024年03月CCF-GESP编程能力等级认证Python编程五级真题解析

下面流程图在yr输入2024时,可以判定yr代表闰年,并输出 2月是29天 ,则图中菱形框中应该填入( )。 A. (yr % 400 == 0) or (yr % 4 == 0) B. ( yr % 400 == 0) or (yr % 4 == 0 and yr %100 != 0) C. ( yr % 400 == 0) and ( yr % 4 == 0) D. (yr % 400 == 0) and (yr % 4 == 0 and yr % 100 != 0)

人生就是一个不断学习的过程 745

辨析C++多态的概念

一文辨析多态中的概念。

知其然 知其所以然 1149

PINNACLE:PINN自适应配点与实验点选择算法

PINNACLE算法通过引入动态权重机制,实现了PINN训练点选择的自适应优化。该算法基于对训练过程中不同区域学习需求变化的深入理解,设计了平滑过渡的权重函数,确保了模型在不同训练阶段能够优先学习最需要的区域。理论分析和实验结果均表明,PINNACLE不仅能够保证收敛性,而且能够显著提高PINN的性能。这一算法为物理信息神经网络的应用提供了重要支持,尤其适用于复杂PDE问题的求解。

VectorShift的博客 1136

5 Java面向对象- 代码块、static、final、类、方法、继承、多态、权限修饰符、接口、内部类、抽象类和抽象方法

面向对象

smalltorch的博客 741

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

面向对象进阶:包、权限修饰符、抽象类、接口

基于您提供的PPT《面向对象进阶:包、权限修饰符、抽象类、接口》,我将为您撰写一篇博客文章,并在每个要点中附上相关代码示例:---

2302_80084329的博客 826

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

头歌平台Java实验:Java面向对象高级

2.实现Demo接口,完善接口中的show方法,打印输出 “实现了接口中的show方法”System.out.println("实现了接口中的show方法");1.编写MyInterface接口,含一个抽象方法sayHi,返回值为void。System.out.println("接口定义完成");根据提示,在右侧编辑器补充代码,完成接口的书写和接口的实现。实现了接口中的show方法。

jing13_13的博客 7517

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

八、面向对象编程(高级)

这篇文章是关于Java面向对象编程的高级概念的详细介绍。它涵盖了类变量与类方法、main方法的static关键字、代码块、单例模式、final关键字、抽象类、接口以及内部类等主题。文章通过示例代码和图表,深入探讨了这些概念的使用场景、注意事项和细节讨论,非常适合希望深入理解Java面向对象编程的开发者阅读。

weixin_44063529的博客 1843

java 基础知识一(面向对象)

obj 可以看作内存中一个对象的句柄c/c++中,obj称为指针,java中称为Reference对象赋值时Reference 赋值,而基本类型时直接拷贝值基本类型的变量值小,可直接拷贝;对象包含多个值,不容易复制,赋值采用共享同一块内存区域。函数中局部变量,编译器不会给默认值,需要初始化才可使用;类的成员变量,编译器会给默认值,可以直接使用。this 在类中的用法1、指向本类中的成员变量2、指向本类中的成员方法3、可以当作构造函数使用。

larance的挨踢生活 638

黑马java学习笔记7(阶段二 第一章 1-2~1-5)

黑马java学习笔记7(阶段二 第一章 1-2~1-5)

xiaozhuzhu__的博客 1211

java——final关键字;abstract抽象类;implement接口

final使用注意事项和细节讨论;抽象类使用注意事项和细节讨论,抽象类最佳实践-模板设计模式;接口使用注意事项和细节讨论;实现接口VS继承类;接口的多态特性

Good_Starry的博客 903

Day08-【Java SE进阶】面向对象高级二——多态、final、抽象类、接口

对象多态:一个人可以是学生也可以是老师,学生和老师都是人的子类,创建人对象让其指向不同的对象,称为对象多态,这里是向下转型的特征。父类知道每个子类都要做某个行为,但每个子类要做的情况不一样,父类就定义成抽象方法,交给子类去重写实现,我们设计这样的抽象类,就是。在Java中有一个关键字叫:abstract,它就是抽象的意思,可以用它修饰类、成员方法。final关键字是最终的意思,可以修饰(类、方法、变量)情况下的一种现象,表现为对象多态和行为多态。定义一个抽象类,在里面定义2个方法。

没有人的博客 925

复习(一)——基础知识问题解答

复习(一)——基础知识问题解答

初叙 267

Java学习(接口,多态,instanceof关键字,final关键字)

一.接口 1.接口是一种公共的规范标准。 2.接口定义的基本类型。 package ln.javatest.day08.demo01; /* 接口就是多个类的公共规范。 接口是一种引用类型数据,最重要的内容就是其中的抽象方法。 如何定义一个接口的格式: public interface 接口名称{ //接口内容 } 备注:换成了关键字interface之后,编译生成的字节码文件仍然是.java --> .class 如果是Java7,那么接口中可以包含的内容有: 1.常量 2.抽象方法

XXX_17的博客 525

08JAVA基础关键字(final、static)以及抽象类和接口

#一、关键字 ##1、final 修饰类 修饰变量 修饰成员方法 该类为最终类,不能被继承 该变量为常量 该成员方法不能被重写 ##2、static ###(1)、生命周期 随着类的加载而加载 ###(2)、特点 被本类所有对象共享 使用方式:类名.静态成员 在实例化对象前被加载 ###(3)、成员特点 静态方法中只能使用静态成员 非静态方法中可以使用静态成员也可以使用非静态成员 静态方法中不能使用this、super(因为此时对象还没有创建,先进内存的不能方位后进内存的) #二、

qq_43006401的博客 173

core 实例化接口_java 学习笔记 day08 final/static关键字、抽象类和接口

1.final关键字final修饰类:此类不能被继承final修饰变量:则变量不能被修改,是常量final修饰方法:父类的方法被final修饰时,不能被重写2.static关键字2.1被static修饰的成员的特点,被类的所有对象共享可以通过类名直接访问优先于对象存在随着类的加载而加载public class student { public String name; public...

weixin_39548787的博客 84

java 学习笔记 day08 final/static关键字、抽象类和接口

这里写目录标题1.final关键字2.static关键字2.1被static修饰的成员的特点,2.2被static修饰的成员方法3.抽象类4. 接口 1.final关键字 final修饰类:此类不能被继承 List item List item final修饰变量:则变量不能被修改,是常量 final修饰方法:父类的方法被final修饰时,不能被重写 2.static关键字 2.1被static修饰的成员的特点, 被类的所有对象共享 可以通过类名直接访问 优先于对象存在 随着类的加载而加载 pub

KKT 351
上一篇: 07_static_JavaBean_继承_super/this
下一篇: 09_多态_代码块_内部类
ChoSeitaku
博客等级 码龄5年 3452粉丝 557原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值