java基础(1)面向对象

本文介绍了面向对象编程的基本概念,对比了面向对象与面向过程的区别,详细解析了成员变量与局部变量的不同之处,以及封装、继承、接口和多态等面向对象编程的核心特性。

面向对象

面向对象和面向过程的区别
1.面向对象可是说是一种功能的概述。而面向过程可以说是功能的具体表现。不管是面向对象还是面向过程,都是一种程序设计思想。
面向对象的三大特征封装,继承,多肽。
局部变量和成员变量的区别
 1. 区别一,定义的位置不同
    成员变量定义在类中,局部变量定义在方法和{}中
 2. 区别二,在内存中的位置不同
    成员变量在对内存中,局部变量在栈内存中。
 3. 区别三,生命周期不同
    成员变量随着对象的出现而出现在对内存中,随着对象的消失而消失
    局部变量随着方法的运行出现在栈内存中,随着方法的弹栈而消失
 4. 区别四,初始化不同
    成员变量在堆内存中,所有默认的初始化值。
    局部变量没有默认的初始化值,必须手动赋值才能使用。
封装
  1. 类中 不需要对外提供的内容都需要私有化,包括属性和方法。
    以后再描述事物,属性都有私有化,并且对外提供get,set方法。
  2. 私有化仅仅是封装的体现形态。
内存对象创建使用过程

内存对象创建使用过程

继承
好处:提高了代码的复用性,继承让类与类或对象与对象之间产生了关系。提高了代码的维护性。
接口
接口是功能的合集,同样可看作是一种数据类型,是比抽象类更抽象的“类”。
接口只描述所应该具备的方法,并没有具体实现,具体的实现由接口的实现类(相当于接口的子类)来完成。这样将功能的定义与实现分离,优化了程序设计。
多肽
多肽体现了事物的多种形式,+
多态的前提是必须有子父类关系或者类实现接口关系,否则无法完成多态。
在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
instanceof 判断当前的类型。
  1. 什么时候使用向上转型
    当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作,这时就可以使用向上转型。
  2. 什么时候使用向下转型
    当要使用子类特有功能时,就需要使用向下转型。
  3. 向下转型的好处:可以使用子类特有功能。
    弊端是:需要面对具体的子类对象;在向下转型时容易发生ClassCastException类型转换异常。在转换之前必须做类型判断。
构造方法
  1. this的使用方法
    this代表的是对象,哪个对象调用了this所在的方法,this就代表哪个对象。
    成员变量和局部变量同名时,可以使用this来区别。
    class Person {
        private int age;
        private String name;

        // 给姓名和年龄初始化的构造方法
        Person(String name, int age) {
            // 当需要访问成员变量是,只需要在成员变量前面加上this.即可
            this.name = name;
            this.age = age;
        }

        public void speak() {
            System.out.println("name=" + this.name + ",age=" + this.age);
        }
    }

    class PersonDemo {
        public static void main(String[] args) {
            Person p = new Person("张三", 23);
            p.speak();
        }
    }
  1. super关键字
    在创建子类对象是,父类的构造方法先执行,因为在子类中所有构造方法的第一行有默认的隐式super()语句。
 格式:
    调用本类中的构造方法
       this(实参列表);
    调用父类中的空参数构造方法
        super();
    调用父类中的有参数构造方法
        super(实参列表);
--如果子类的构造方法第一行写了this调用了本类其他构造方法,那么super调用父类的语句不会存在。this()super(),只能定义在构造方法的第一行,因为初始化动作要先执行。
--父类构造方法中是有隐式的super()语句,因为在java体系中,定义了个一个所有对象的父类object。

3. final关键字
-final修饰类不可以被继承,但是可以继承其他类。
-final修饰的方法,不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。
-final修饰的变量成为变量,这些变量只能赋值一次。
-引用类型的变量值为对象地址值,地址值不能改变,但是地址内存的对象属性值可以修改。
-修饰成员变量,需要在创建对象前赋值,否则报错。
“` stylus
class Demo {
//直接赋值
final int m = 100;

    //final修饰的成员变量,需要在创建对象前赋值,否则报错。
    final int n; 
    public Demo(){
        //可以在创建对象时所调用的构造方法中,为变量n赋值
        n = 2016;
    }
}

```

4.static 关键字静态修饰符

(1). 被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)。

    class Demo {
        public static int num = 100;
    }

    class Test {
        public static void main(String[] args) {
            Demo d1 = new Demo();
            Demo d2 = new Demo();
            d1.num = 200;
            System.out.println(d1.num); //结果为200
            System.out.println(d2.num); //结果为200
        }
    }

(2). 被static修饰的成员变量可以并且建议通过类名直接访问。

    class Demo {
        //静态成员变量
        public static int num = 100;
        //静态方法
        public static void method(){
            System.out.println("静态方法");
        }
    }
    class Test {
        public static void main(String[] args) {
            System.out.println(Demo.num);
            Demo.method();
        }
    }

注意事项
静态内用是优于对象存在,只能访问静态,不能使用this、supser。静态内容存在于静态区、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值