浅谈Java三大特性
java三大特性
1、封装,是指隐藏对象的属性和实现细节,仅对外提供公共访问方式;
2、继承,从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力;
3、多态,一个方法可以有多种实现版本,即“一种定义, 多种实现”。
封装
面向对象程序设计的核心就是封装,在面向对象程序设计中,封装是通过把一组数据和与数据有关的操作集合放在一起形成对象。
public class Person {
private String name;
private int age;
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
优势
封装的实现
1.需要修改属性的访问控制符(修改为private);
2.创建getter/setter方法(用于属性的读写);
3.在getter/setter方法中加入属性控制语句(用于判断属性值的合法性);
属性 (成员变量 ) 随对象存放在堆中
特点
将变量等使用private修饰,或者封装进方法内,使其不能直接被访问,增加了访问步骤与难度!
继承
继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力 。
下方的代码:Person是父类 Student的子类
public class Person {
private String name;
private int age;
private String sex;
// setXXX和getXXX方法省略
}
public class Student extends Person {
private int id;
// setXXX和getXXX方法省略
}
public class ·Student {
private String name;
private int id;
private int age;
private String sex;
// setXXX和getXXX方法省略
}
子类的继承性
子类与父类在同个包中
子类继承父类除了private成员
子类与父类在不同包中
子类继承父类除了private、友好成员
protected成员
若子类与祖先类同包,子类可访问
子类对象的构造过程
子类对象在实例化时,子类对象会默认先调用父类中的无参构造函数,然后再调用子类构造构造方法
继承的限制
- 一个子类只能够继承一个父类,存在单继承局限
- 在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法)
- 实例化子类对象时,先初始化父类中的属性,再初始化子类中的属性
继承的特点:
(1) 子类比父类强大
(2)java是单继承,不能进行多继承。但是可以继承多层子类(不建议继承超过3层)
(3)子类继承父类,但是对父类的成员变量是无法直接操作,只能通过父类继承过来的setter和getter方法.
继承的优点:
(1)减少代码量,能很好的提高复用率。
(2)使类与类之间存在继承关系,是实现多态操作的前提。
继承注意点
(1)不要仅仅为了获取某个类的某个功能而去继承这个类
(2)类与类之间要存在所属关系,不能够随意继承
何时使用继承
(1)具有公共的属性与行为操作的时候,提高复用性
(2)具有is–a的所属关系的类与类之间
多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定 。多态有两种:引用多态和方法多态。继承是多态的实现基础。
class Animal {
public int age = 2;
public void eat() {
System.out.println("动物吃东西");
}
}
多态存在的前提
A.必须有子类和父类,具有继承或实现(继承)
B.子类必须重写父类的方法(重写)
C.父类的引用变量指向子类的对象(向上转型)
下面看一下代码
class Dog extends Animal {
public int age = 3;
public void eat() {
System.out.println("小狗吃肉");
}
public void sleep() {
System.out.println("小狗睡午觉");
}
}
class Cat extends Animal {
public int age = 4;
public void eat() {
System.out.println("小猫吃鱼");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog();
Animal b = new Cat();
a.eat();
System.out.println(a.age);
b.eat();
System.out.println(b.age);
}
}
有个小技巧 ,成员变量: 编译和运行看左边 ,成员方法: 编译看左边,运行看右边
重载和重写的区别
重载发生在本类,方法名相同,参数列表不同,与返回值无关,只和方法名,参数列表,参数的类型有关
重写发生在父类子类之间,方法名相同,参数相同,但是具体的实现不同
|
重写(Overriding) |
重载(Overloading) |
类的数量 |
父子类,接口与实现类 |
本类 |
方法名称 |
一致 |
一致 |
参数列表 |
一定不能修改 |
必须修改 |
返回值类型 |
一定不能修改 |
可以修改 |
异常 |
可以减少或删除,但不能扩展 |
可以修改 |
多态的优点
关于JAVA三大特性大概就介绍到这里了,感恩能与大家在华为云遇见!希望能与大家一起在华为云社区共同成长。
- 点赞
- 收藏
- 关注作者
评论(0)