会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132433个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程和并发编程(旧) 2792楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2794楼

调用父类的方法失败

源码:

public class Test{
    public static void main(String[] args) {
        CarFunction newCar = new Car();
        //newCar.move();
        FlyCar flyCar = new FlyCar(newCar);
        //flyCar.fly();
        AICar aiCar = new AICar(flyCar);
        aiCar.AI();
    }
}

//定义接口
interface CarFunction{
    void move();    //抽象方法:移动方式
}

//具体的构建角色Car类
class Car implements CarFunction{
    public void move(){
        System.out.println("在陆上行驶的汽车");
    }
}

//装饰器角色
class SuperCar implements CarFunction{
    private CarFunction newCar;
    SuperCar(CarFunction newCar){
        this.newCar = newCar;
    }

    @Override
    public void move() {
        newCar.move();      //调用真实角色的行驶的方法
    }
}

//
class FlyCar extends SuperCar{
    public FlyCar(CarFunction newCar){
        super(newCar);
    }

    @Override
    public void move() {
        super.move();        //调用父类的行驶方法
        this.fly();
    }

    public void fly(){
        System.out.println("拥有飞行功能的汽车");
    }
}

class AICar extends SuperCar{
    AICar(CarFunction newCar){
        super(newCar);
    }

    @Override
    public void move() {
        super.move();
        this.AI();
    }

    public void AI(){
        System.out.println("拥有人工智能自动驾驶的汽车");
    }
}

class WaterCar extends SuperCar{
    WaterCar(CarFunction newCar){
        super(newCar);
    }

    @Override
    public void move() {
        super.move();
        this.water();
    }

    void water(){
        System.out.println("可以水上行驶的汽车");
    }
}

运行结果:


JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2796楼

package cn.io;

import java.io.*;

/**
 * 测试复制文件夹
 */
public class TestCopyFile {
    public static void main(String[] args) {
        //File srcFile = new File("D:\\答辩准备.docx");
        //File targetFile = new File("E:\\答辩准备.docx");
        //先复制一个文件
        //copyFile(srcFile,targetFile);
        //复制正个目录
        File srcDir = new File("E:\\百战程序员");
        File targetDir = new File("D:\\百战程序员");
        copyDir(srcDir,targetDir);
    }

    //复制整个目录
    public static void copyDir(File srcDir,File targetDir){
        //(1)如果目标目录不存在,则需要使用File类的方法进行创建目录
        if (!targetDir.exists()){
            targetDir.mkdir();
        }
        //(2)获取指定目录下的所有File对象
        File[] files = srcDir.listFiles();

        //(3)遍历分解指定目录下的文件
        for (File file :files){
            if (file.isFile()){
                /**
                 * 调用赋值文件方法
                 * 1.srcDir--->E:\\API   拼接    E:\\Api\\XXXXX.xxx文件
                 * 2.targetDir--->D:\\API   拼接    E:\\Api\\XXXXX.xxx文件
                 */
                copyFile(new File(srcDir+"\\"+file.getName()),new File(targetDir+"\\"+file.getName()));

            }else {
                copyDir(new File(srcDir+"\\"+file.getName()),new File(targetDir+"\\"+file.getName()));
            }
        }

    }

    /**
     * 复制一个文件
     * @param srcFile
     * @param targetFile
     */
    public static void copyFile(File srcFile, File targetFile){
        //(1)提高读取效率,从数据源
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            bis = new BufferedInputStream(new FileInputStream(srcFile));
            //(2)提高写入效率,写到目的地
            bos = new BufferedOutputStream(new FileOutputStream(targetFile));
            //(3)边读边写
            byte[] buf = new byte[1024];        //中转站
            int len = 0 ;
            while((len=bis.read())!=-1){
                bos.write(buf,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //(4)关闭
            try {
                if (bos!=null){
                    bos.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if (bis!=null){
                    bis.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }


    }
}

老师,我执行这段代码,没有报错,但是硬盘差点爆了,硬盘快满了,程序还没有停,是哪里出问题了吗?

JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2798楼

package com.bjsxt.mycollection.myarraylist;

import java.util.Arrays;

/**
 * 写一个乞丐版ArrayList,实现add,remove,get
 */

public class myArrayList {
    private final int DEFAULT_CAPACITY = 10;//定义默认初始容量为10
    private final Object[] DEFAULT_EMPTY_OBJ = {};//定义一个长度为0的Object类型数组
    public Object[] defaultObj = {};//空数组
    private int size;//数组大小

    //(1)无参构造方法
    public myArrayList() {
        this.defaultObj = DEFAULT_EMPTY_OBJ;
    }
    //(2)带参构造器
    public myArrayList(int Capacity) {//初始长度大于0就创建长度为初始化数值的对象数组
        if(Capacity>0) {
            this.defaultObj = new Object[Capacity];
        }
    }
    //(3)检测空间容量是否够用
    public void ensureCapacityInternal(int minCapacity) {
        if(defaultObj==DEFAULT_EMPTY_OBJ) {
            minCapacity = Math.max(DEFAULT_CAPACITY,minCapacity);
        }
        if(minCapacity>defaultObj.length) {
            grow(minCapacity);
        }
    }
    //(4)扩容grow方法
    public void grow(int minCapacity) {
        int oldCapacity = defaultObj.length;
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        if(newCapacity - minCapacity<0) {
            newCapacity = minCapacity;
            defaultObj = Arrays.copyOf(defaultObj,newCapacity);
        }
    }
    //(5)add方法
    public boolean add(Object obj) {
        ensureCapacityInternal(size+1);
        defaultObj[size++] = obj;
        return true;
    }
    public void add(int index,Object obj) {//根据索引添加
        System.arraycopy(defaultObj,index,defaultObj,index+1,size-index);
        defaultObj[index] = obj;
        size++;
    }
    //(6)remove方法
    public String remove(int index) {
        String oldValues = (String)defaultObj[index];
        int numMove = index-1;//拷贝的元素个数
        if(numMove>0) {
            System.arraycopy(defaultObj,index+1,defaultObj,index,numMove);//将后一位拷贝到前一位
            defaultObj[--size] = null;//最后一个位置设为空
        }
        return oldValues;
    }
    //(7)get方法
    public Object get(int index) {
        return defaultObj[index];
    }
    public int size(){
        return size;
    }
    //输出方法
    public void print() {
        for(Object obj:defaultObj) {
            System.out.print(obj+"\t");
        }
    }

    public static void main(String[] args) {
        myArrayList list = new myArrayList();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("1");
        list.add("2");
        list.add("3");
        System.out.println("****add()方法****");
        list.print();
        System.out.println("集合中元素个数:"+list.size);
        list.remove(2);
        System.out.println("****remove()方法****");
        list.print();
        System.out.println("集合中元素个数:"+list.size);
        System.out.println("****get()方法****");
        System.out.println(list.get(1));
    }
}

老师,作业要求写一个自己的ArrayList,测试的时候只要添加超过10个就报错,帮忙看一下是哪里出了问题。

image.png

JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2800楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/常用类 2801楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637