JAVA对象和三大特性(day2)

  • JAVA对象的知识点

    类的实例化结果就是对象,而对一类对象的抽象就是类.类描述了一组有相同特性(属性)和相同行为(方法)的对象。

public class Person {
    // 属性
    String name;
    int age;
    
    // 方法
    public void sayHello() {
        System.out.println("Hello, my name is " + name);
    }
}
​
Person person1 = new Person();//创建对象
person1.name = "Alice";
person1.age = 25;
person1.sayHello();

过程:使用new关键字创建了一个Person类的对象,并将其赋值给person1变量;

创建了对象就可以使用点号访问对象的属性和方法;


JAVA的八种基本数据类型:byte,short,int,long, float,double,boolen,char

八种基本数据类型不是对象;所有对象都继承自Object顶层父类

为了解决基本类型不是对象所带来的裂痕,JAVA给每一个基本数据类型都创建了对应的包装类型;

byteshortintlongbooleanfloatdoublechar
ByteShortIntegerLongBooleanFloatDoubleCharacter
Integer a = 8;//装箱:基本数据类型赋值给包装类型
int b = a;//拆箱:包装类型赋值给基本数据类型

至此,基本数据类型拥有了对象的一切特性;


基本数据类型,只有一块存储空间, 在栈中,存放的是具体数据值。

引用数据类型,有两块存储空间一个在栈(Stack)中,一个在堆(heap)中。堆中存放对象实体(使用new关键字,即表示在堆中开辟一块新的存储空间),栈中存放对象在堆中所在位置的首地址。引用类型变量类似于C/C++中的指针。

引用:一个引用类型变量(栈中的一块内存空间)保存了一个该类型对象在堆中所在位置的首地址,也称作一个引用类型变量指向了一个该类型的对象,通过这个变量就可以操作对象中的数据。

String a = "abc";//a保存的是对象在堆中的首地址
String b = a;//a的首地址赋值给b
String c = new String("abc");//出现new关键字,在堆中开辟一个新的空间
sout(a == b);//比较堆中的地址值,true
sout(a == c);//比较地址值,flase
sout(a.equals(c));//String中对equals进行了重写,比较内容,true

  • JAVA三大特性:封装、继承、多态

  1. 封装:方法封装了算法的细节,使使用者不需要关系算法是具体如何实现的;通过get\set方法访问成员变量,可以制定所需要的规则;如限定成员变量的长度范围、隐藏关键信息等,能够保证数据的安全;

  2. 继承:JAVA不支持多继承,但可以多重继承;

    is-a原则(判断编译是否成功,判断父子类的关系):

    从右往左读,如果能从逻辑上说:B是一种A,B就是A的子类(例如:Dog is a Animal, Dog就是Animal的子类)

    Animal animal1 = new Dog();//Dog是一种animal 逻辑通顺 Dog是Animal的子类 通过编译 此时为父类引用指向子类对象
    Dog dog = new Animal();//反之错误
    Dog dog = animal1;//编译失败,此时从右往左读逻辑与上一行相同
    Dog dog = (Dog)animal1;//强制类型转换 通过编译
    Cat cat = (Dog)animal1;//能通过编译,但是由于animal1指向Dog对象,此处赋值为cat对象,

    has-a原则(判断类与成员的关系):

    public class Bird extends Animal{
        private String wings;
    }

    鸟有翅膀,逻辑通过;动物有翅膀,逻辑不通过;因此,wings这个成员变量适合定义在Birs类中,而不能出现在Animal类中

  3. 多态

    多态的开闭原则:对修改关闭,对扩展开放;

    Animal animal1 = new Dog();//此时为父类引用指向子类对象

    多态优点:父类的引用指向子类的对象时,调用的方法是子类重写之后的方法,既体现了多种类型的传递,又体现了不同类型的特性;既复用了父类的属性和方法,又扩展了自己的逻辑

    多态的条件:1.要有继承;2.父类引用指向子类对象;

    参数定义的是Animal类,传进来的参数必须是Animal的子类;参数类型是父类,传进来的确是子类,此时对应is-a原则,父类的引用指向子类的对象

    子类在调用构造函数创建对象时,会先调用父类的构造函数,以便初始化继承自父类的成员。然后再执行子类自己的构造函数,完成对子类特有成员的初始化。父类引用指向子类对象后,通过该引用只能访问到父类的成员和子类重写或覆盖的父类成员,而无法直接访问子类特有的成员(如果有)。因为在编译时,编译器只知道该引用的类型是父类,所以只能看到父类中定义的成员。

在学习面向对象时,应该着重学习面向对象的设计和理念。如果不经思考滥用,会让代码难以理解和难以维护,代码设计是一门学问。

参考文献:

  1. 【每天一个技术点】搞懂这两个概念,就搞懂了继承哔哩哔哩bilibili

  2. 【每天一个技术点】多态,多么变态哔哩哔哩bilibili

  3. 【每天一个技术点】多态,多么变态哔哩哔哩bilibili

  4. 面向对象编程中的继承与多态:深入理解父类引用指向子类实例_父类的引用指向子类的实例-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值