• 20java的组合&IDEA踩坑合集1


    组合(模式)

    组合(模式)的概念:组合多个对象形成树形结构以表示有整体-部分关系层次结构,组合模式可以让客户端统一对待单个对象和组合对象。

    组合继承能实现相同的效果,但是使用方法有所区别。

    • 下面看组合的程序实例:
    package oop.OopDemo.Polymorphic;
    
    public class Test {
        public static void main(String[] args) {
            Student student = new Student();
            student.run();
            student.speak();
            student.person.print();
            student.teacher.teach();
            System.out.println(student.person.name);
        }
    }
    
    package oop.OopDemo.Polymorphic;
    
    public class Student {
        Person person = new Person();
        Teacher teacher = new Teacher();
        public String name;
        public int age;
        public Computer computer;
    
        public void speak() {
            person.speak();
            System.out.println("Student is speaking");
            person.name = "I was initialization here.";
        }
    
        public void run() {
            person.run();
            System.out.println("Student is running");
        }
    }
    
    package oop.OopDemo.Polymorphic;
    
    public class Person {
        public String name;
    
        public Person() {//无参构造器
        }
    
        public void print() {
            System.out.println("I'm Person class!");
        }
    
        public void speak() {
            System.out.println("Person is speaking!");
        }
        public void run() {
            System.out.println("Person is running");
        }
    }
    
    
    package oop.OopDemo.Polymorphic;
    
    public class Teacher{
        public void teach() {
            System.out.println("I'm teaching");
        }
    }
    
    

    注意:这里的四个类在同一个package下!

    运行结果:

    上述代码并未使用继承,但是仍然实现了不同类之间方法的使用

    由以上的执行结果可见,Student类并未继承Person类和Teacher类,但是仍能够读写Person类和Teacher类的属性和变量,这里使用了组合。而且可以看到,相比继承来说,使用组合能够更加灵活方便的实现不同类的属性和方法的调用。

    • 那么问题来了,组合和继承可以实现相同的功能,那究竟使用哪个?

    下面说一个比较popular的规则:

    • 如果是 “is-a” 关系,就是用继承。

      比如:哺乳动物是动物,学生是人,等等

    • 如果是 “has-a” 关系,使用组合。

      比如:电子计算机有CPU,汽车有发动机,等等。

    注意:经测试:对于上述程序,如果主类和这些组合类不在同一个包中,是无法调用组合的类的。但是被组合的类如果不在同一个包下,是可以import,然后再组合实现的。

    这里说teacher不是public,实际上Teacher是public,目前还不太清楚报错的原因,以及如何解决。

    • 上面的报错有了新进展,根据报错的提示,我把new teacher 对象的语句加了一个修饰符public,虽然我之前从来没见过这种用法,没想到尝试了一下竟然神奇般的不报错了,还能正常输出,程序如下:
        public Person person = new Person();
        public Teacher teacher = new Teacher();
        public Point point = new Point();
    
    • 另外附上修饰符的作用范围:

    IDEA踩坑合集1


    01问题描述:所有的.java文件图表左下角有个红色时钟,全部报错

    解决办法

    1.

    2.

    3.如果还不行,就重导入项目

    出现大面积的程序的包路径不对,也可以尝试重新导入项目解决。

    还有可能是下图这个地方不对

    选择相应的configuration即可


    02问题描述:打开IDEA显示之前的project路径不能用了,但是我没动过java project的文件路径

    解决办法

    按照提示导入原来的project即可,需要注意的是,其中有一步是选择override现有的Module,还是reuse,选择reuse。


    03问题描述:代码不报错但是下面一直有波浪线

    代码下面有波浪线,报错:Duplicated code fragment,意思是这部分的代码跟其他地方的有重复,不影响运行,如果点击show就会变成下图这样,真智能,就是这个绿色的区域不好消除,我试了几次只有关闭这个class 然后再打开就消失了。

    自学java,请多多指教!
  • 相关阅读:
    linux离线安装nodejs ,配置环境,离线配置全局包
    前端项目路由使用browserHistory不能刷新,页面刷新错误,
    手机uc浏览器打不开本地网页,网页一片空白
    display:flex兼容性,
    react生产环境样式丢失问题 在浏览器中看到标签有类名,但没有样式
    redux使用redux-thunk中间件处理异步状态管理请求
    配置Redux DevTools
    flex-grow属性在文本过长时会超出父窗体长度
    react配置代理,解决跨域
    react修改状态
  • 原文地址:https://www.cnblogs.com/fanfada/p/13803994.html
Copyright © 2020-2023  润新知