• 黑马程序员


    面对对象

    如何理解面向对象?
      面向过程:强调的是功能行为。
      面向对象:将功能封装进对象,情调对象说具备的功能。
      面向对象是基于面向过程的。
    类和对象的关系
      现实生活中的对象:张三李四
      想要描述:提取对象中共性内容,对具体的抽象。
      描述时:这些对象的共性有:姓名,年龄,性别,学习java功能。
      映射到java中,描述就是class定义的类,具体对象就是堆内存中用new建立的实体。

    类:对现实生活中事物的描述。
    对象:实实在在存在的类的个体。
    匿名对象:
      匿名对象使用方法一:当对对象方法只调用一次时,可以用匿名对象来完成,这样比较简化。
      匿名对象使用方法二:可以将匿名对象作为实际参数进行传递。
    面向对象三大特征:封装,继承,多态
    封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
    优点:
      将变化隔离
      便于使用
      提高重用性
      提高安全性
    封装原则:
      将不需要对外提供的内容都隐藏起来
      把属性都隐藏,提供公共方法对其访问

    继承:
      1.提高代码复用性
      2.让类与类之间产生关系,有了这个关系,才有了多态的特性
      3.打破流封装性。
      注意:不能为了获取其他类的功能,简化代码而继承
        必须是类与类之间有所属关系才可以用继承。
      java中支持单继承,即一个子类只能有一个直接父类。
      java不支持多继承,但支持多层继承。
    super关键字:子类与父类成员变量重名时,super.变量名代表父类成员变量。
    this关键字:本类成员与局部变量重名时,this.变量名代表本类成员。
    父类的数据是存储在子类对象中的。当父类与子类存在重名函数时,子类函数会覆盖父类函数。
    注意:此时子类函数的权限必须大于或等于父类函数,而且两者必须均为静态或非静态函数。
      子类构造函数:
    子类的构造函数中存在一个隐式语句super();默认先调用父类构造函数进行初始化,在运行子类特有的构造方法。
    因为子类继承了父类,获取了父类的属性,所以在使用父类属性前,必须先对父类进行初始化。
    如果父类存在多个构造函数,而且没有定义空参数的构造函数,那么子类构造函数在定义时必须明确调用父类的哪个构造函数。
    final关键字
    1.final是一个修饰符,可以修饰类,方法,变量。
    2.final修饰的类不可以被继承。
    3.final修饰的方法不可以被覆盖。
    4.final修饰的变量是一个常量,只能被赋值一次。

    以下代码简单演示一个继承实现方式和特点

    class  Fu
    {
        int a=66;
        int num = 77;
        Fu ()
        {
            super(); //调用最底层object.
            show();  //因为函数同名,优先调用Zi类的show函数,此时num为默认初始值0.
            return;
        }
        void show()
        {
            System.out.println("fu show");
        }
    }
    class Zi extends Fu
    {
        int num = 8;  //先运行Zi的构造函数Zi()中的super(),再运行此项。
        Zi()          
        {
            super();  //此步骤最先运行,通过super初始化Fu时,num并未显示初始化,此时num为默认初始值0.
            show();   //此时输出zi show ...8.
            return;
        }
        void show()
        {
            System.out.println("zi show ..."+num+";"+"fu shou ..."+super.num);
            System.out.println("a show ..."+a);        //调取父类变量
        }
    }
    class ExtendsDemo
    {
        public static void main(String[] args)
        {
            Zi z = new Zi();
            System.out.println();
            z.show();
        }
    }

    运行结果

    static 关键字:
    static 修饰成员变量:
    特有的使用方式: 可以直接通过类名来访问.
    特点:
      随着类的加载而加载,存储在共享区(方法区)
      静态变量和普通成员变量的区别:
      普通成员变量:随着对象的创建存储于堆内存,随着对象的消失而消失(变垃圾被回收)
      每一个对象在堆内存中都存储的有自己特有的成员变量.
    静态变量:随着类的加载而加载,存储于共享区, 内存只有1份. 可以被所有对象所共享
    static 修饰成员方法:静态方法
    特有的使用方式:可以直接通过类名来调用.
    注意:
      静态方法不能访问非静态成员变量.
      静态方法只能访问静态变量

    本程序演示 this static 关键字

    class  Person
    {
        static String country = "CN"; //静态变量 或 类变量 实例变量
        private String name;    //成员变量
        private int age;
        Person(String name)
        {
            this.name=name;
        }
        Person(String name , int age)
        {
            this(name) ; // this代表当前对象(Person)进行初始化,因为只有一个参数,所以自动调用上面的Person构造函数。
            this.age = age;
        }
        public void speak()
        {
            
            System.out.println(country+":"+this.name+":"+this.age);  
        }
        public boolean compare(Person p)  //判断本对象与p对象是否age相同
        {
            return this.age==p.age;
        }
    }
    //加 this. 输出 001;0    不加输出 null:0
    class  ThisDemo
    {
        public static void main(String[] args) 
        {
            Person p1 = new Person("001",20);
            Person p2 = new Person("002",25);
            p1.speak();
            p2.speak();
            System.out.println(p1.compare(p2));
            System.out.println(Person.country); //静态数据可以直接用类名调用
        }
    }
  • 相关阅读:
    诗人就是“情场浪子”的代名词?
    微博营销,开启营销的新时代
    网店成功之道:卖家应有4种心态(实战交流)
    一枚钉子前进
    推动中国文学的发展,我义不容辞
    微博营销,再次引爆网络江湖
    微博营销,不仅仅是粉丝
    邮件群发软件版本升级公告
    如何让自己在浩瀚的网海中脱颖而出
    如何定时关机【windows/linux】
  • 原文地址:https://www.cnblogs.com/myblog-cl/p/4748757.html
Copyright © 2020-2023  润新知