zoukankan      html  css  js  c++  java
  • 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,请多多指教!
  • 相关阅读:
    【EF6学习笔记】(四)弹性连接及命令拦截调试
    【EF6学习笔记】(三)排序、过滤查询及分页
    【EF6学习笔记】(二)操练 CRUD 增删改查
    【EF6学习笔记】(一)Code First 方式生成数据库及初始化数据库实际操作
    SQL Server表分区
    【工具类】
    【C#加深理解系列】(二)序列化
    【ASP.NET Core分布式项目实战】(三)整理IdentityServer4 MVC授权、Consent功能实现
    【转载】IdentityServer4 使用OpenID Connect添加用户身份验证
    【ASP.NET Core分布式项目实战】(二)oauth2 + oidc 实现 server部分
  • 原文地址:https://www.cnblogs.com/fanfada/p/13803994.html
Copyright © 2011-2022 走看看