• object类和内部类


    1.Object

    object类是所有类的根类(父类)。

    如果一个类没有显示继承另外一个类,那么该类一定继承于object类。

    toString()返回对象字符串的的形式。

    public class Test01 {
        public static void main(String[] args) {
            Object obj = new Object();
            // 输出对象时,默认调用toString方法
            System.out.println(obj);
            // 类型@内存地址
            System.out.println(obj.toString());
            
            
            Student s1 = new Student("二狗",20);
            System.out.println(s1);
        }
    }

    可以通过代码生成器快速生成toString方法。

    equals(object obj)用于判断两个对象是否相等。

    ==比较两个对象的内存地址或基本数据类型的或char类型比较,object默认equals实现比较内存地址。

    equals:用于比较两个对象的内容(属性)是否相等。

    自定义对象时,要比较自定义对象是否相等,就必须通过equals方法比较两个对象属性值是否相等,那就必须重写Objectequals方法

    public boolean equals(Object obj) {
            if(this == obj) {
                return true;
            }
            
            Student s = (Student) obj;
            if(this.sid.equals(s.sid) && this.name.equals(s.name) && this.age == s.age) {
                return true;
            }else {
                return false;
            }

    }

    2.内部类

    在java中,一个文件可以定义多个类,但是文件名必须和public类型的类的类名保持一致。

    这两个类是平行关系。

    在java中,一个类也可以定义在一个类的内部,顾名思义定义在内部的类称为内部类(inter class),定义在外部的类称为外部类(out class)。

    形如:

    public class Outer {
        
        [修饰符] class Inner{
            
        }
    }

     编译后的结果

    内部类根据具体的修饰符和具体位置为很多情况。

    2.1成员内部类

    一个内部类作为一个外部类的成员而存在,此时该内部类称为外部类的成员内部类。

    public class Outer {
        
        class Inner{
            
        }
    }

    一般而言,内部类都用默认修饰符。

    【1】内部类如何创建对象

    public class Test01 {
        public static void main(String[] args) {
            
            // 【1】创建外部类对象
            Outer ot = new Outer;
            // 【2】创建内部类对象
            Inter it = ot.new Inter;
                    it.showInfo;        
        }
    }    

    【2】内部类可以访问外部类的私有变量。

    public class Outer {
        
        private String name = "Outer";
        
        class Inner{
            
            public void showInfo() {
                System.out.println(name);
            }
            
        }
    }

    【3】特殊情况内部类与外部类同名。

    class Inner{
            
            private String name = "Inner";
            
            public void showInfo() {
                // String name = "show info";
                
                // 访问外部类的私有成员
                System.out.println(this.name);
                
                // 访问外部类的私有成员
                System.out.println(Outer.this.name);
                
            }
        }
    }

    静态内部类

    如果一个内部类被static 修饰,我们称为这个类为静态内部类。形式

    public class Outer {
        
        static class Inter{
            }
    }

    【1】静态内部类创建对象

    public class Test01 {
        public static void main(String[] args) {
            
            // 【1】创建外部类对象
            Outer outer = new Outer();
            // 【2】创建内部类对象
            Inner inner = outer.new Inner();
            inner.showInfo();
        }
    }

    【2】内部类中可以访问外部类的私有变量

    public class Outer {
        
        private String name = "Outer";
        
        class Inner{
            
            public void showInfo() {
                System.out.println(name);
            }
            
        }
    }

    【3】静态内部类可以访问外部类的(私有)静态成员

    特殊情况:避免发生

    public class Outer {
        
        private static String name = "Outer";
        
        static class Inner{
            
            private static String name = "Outer";
            
            public void showInfo() {
                System.out.println("showInfo");
                
                System.out.println(name);
                
                System.out.println(Outer.name);
            }
        }
    }

    方法内部类

    如果一个内部类定义到一个方法中,我们称为方法内部类

    public class Outer {
        private static int a = 5;
        public void print() {
            int b = 10;
            class Inner {
                public void showInfo() {
                    System.out.println(b);
                    
                }
            }
            Inner inner = new Inner();
            inner.showInfo();
        }
        
    }

    【2】方法的局部变量进入方法内部类时,被加上final 修饰。出了方法内部类之后,final被去掉

    public class Outer {
        
        public void print(int b) {
            
            int a = 10;
            
            class Inner{
                
                public void showInfo() {
                    System.out.println("show info");
                    
                    System.out.println("print()->a:"+10);
                    
                    // 在方法内部类中不能修改方法的局部变量(final)
                    // a = 20;
                    // b = 20;
                }
            }
            
            a = 20;
            
            Inner inner = new Inner();
            inner.showInfo();
        }
    }

    匿名内部类

    未来一个类如果只使用一次,我们可以把类声明为匿名类。匿名类一般和内部类结合使用,形成匿名内部类

    匿名内部类一定要存在:实现接口

  • 相关阅读:
    Asp.net操作Excel----NPOI
    Python第一模块
    Sping笔记一览
    IO流技术一览
    事务技术一览
    日常问题记录
    分页与JDBC显示文档。
    分页技术与JDBC一览
    JDBC 技术开发
    MYSQL
  • 原文地址:https://www.cnblogs.com/ruckly/p/10776311.html
Copyright © 2020-2023  润新知