Java面向对象基础及三大特性

Java面向对象基础及三大特性

#对象的概念

Java是面向对象的编程语言,对象就是面向对象程序设计的核心。而对象就是现实世界的实体的一一对应,理论上说现实世界每一个实体都可以被看做是一个对象,对象有以下特点

  • 对象具有属性和行为(变量和方法)
  • 对象具有变化的状态
  • 对象具有唯一性(每次根据一个类创建对象时都会在堆里开辟新的空间)
  • 对象都是对应类的实例
  • 一切皆可为对象

面向过程的程序设计

最小的程序单元是函数,每一个函数负责完成一个相应的功能,采用自上而下的设计模式,在设计之初就要考虑每一个模块可以分成那些子模块,以此类推分成更小的模块,直到最后细化成一个个的函数,但是随着系统的膨胀,面向过程就会无法应对,最终导致系统的崩溃。与面向对象相比,面向过程设计模式不够直观,与人类思维模式习惯不一致,系统软件适应性差,可拓展性差,维护性低

面向对象的程序设计

最小的程序单元是类,把多个功能合理的放到不同对象里,强调的是具备某些功能的对象,更加符合常规的思维方式,稳定性强,可重用性高,容易开发大型软件产品,有良好的可维护性,在软件工程上可以使工程更加的模块化,实现更低的耦合和更高的内聚

面向对象的三大核心特性

继承

继承(关键字 extends)是Java面向对象编程的基石,因为它允许创建分等级层次的类
继承就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或者子类从父类哪里继承方法使得子类具有和父类相同的行为(private修饰的属性和方法不能被继承,父类总有一些与子类不同的地方)
一般是父类更通用,子类更加具体。例如动物可以作为一个父类,老虎,狮子,大象。。。都可以成为子类,它们都具有动物共有的属性(身高,体重。。),以及行为(吃,睡,捕猎)但是它们在属性和行为上也会有差别,即子类会具有父类的一般特性也会具有自身的特性

语法规则

class 子类 extends 父类
eg: class Dog extends Animal{}
Java中的继承是单继承,即一个子类只能有一个直接父类,但是可以通过匿名内部类继承实现多继承

class Animal{}
class A{}
class Dog extends Animal{}

  • 父类的构造方法不能被子类所继承
    构造方法的名字要和类名一致,另外子类会有更多的属性和方法,父类的构造不适合子类的构造方法需求

  • 父类中的属性和成员方法能否被子类所继承取决于属性和方法的访问修饰符

Java中四个访问修饰符的权限

  • 四个访问修饰符可以修饰属性,成员方法,构造方法
  • 只有public和default可以修饰类
    4个访问修饰符修饰的属性和成员方法继承如下
    private:不能被继承
    default: 同包的子类可以继承
    protected:可以被继承(同包子类+非同包子类)
    public : 可以被继承

super的应用

a. super. 可以用在子类的成员方法或是构造方法中,代表访问父类的
属性或是成员方法
b. super.属性 :访问父类的属性
super.成员方法名(实参); 访问父类的成员方法
(2) 第二种应用:super()
a. super()/super(实参):应用在 子类的构造方法中,代表指示JVM默认
创建父类对象时调用哪一个构造方法完成父类对象的创建。
注意:super()/super(实参)定义在子类构造方法的第一行有效语句
b. 如果在子类构造方法的第一行即没有 super()/super(实参),JVM默认
添加super()
c. 注意:在一个构造方法中,不允许同时使用 super()和this();
如果构造方法的第一行语句为 this()/this(实参),则JVM不再提
供默认 super();此时JVM会通过 this()/this(实参)对应的构造
方法,第一行查找super()/super(实参)

class Person{
private String name;
private int age;
public Person(){
}
public Person(String name,int age){
this.name=name;
this.age=age;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age=age;
}
public int getAge(){
return this.age;
}
}
class Hero extends Person{
private char sex;
public Hero(){
}
public Hero(String name,int age,char sex){
super(name,age);//这里set方法也可以
this.sex=sex;
}
…………
}

带有继承关系的创建对象的过程

创建子类对象,JVM会默认创建一个对应的父类对象,而且此父类对象仅供当前子类操作,外界无法访问。
(1) new :分配空间(子类+父类),同时为属性赋默认值
(2) 执行子类的构造方法:在子类的构造方法第一行遇到super()/super(实参)
①先执行父类的构造方法
a. 执行父类的属性初始
b. 父类构造方法中原有的其他语句
注意:父类的属性初始化语句,也会被编译器移交到每一个父类
构造方法中
②继续执行子类构造构造方法:
a. 执行 子类属性的初始化
b. 子类构造方法中原有内容
注意:子类的属性初始化语句,也被编译器移交到每一个子类的构造方法中,但是位于 super()/super(实参) 后面,构造方法其他语句的前面

多态

多态是同一个行为具有多个不同表现形式或形态能力
也可以简单地理解为是用父类的引用来存储一个子类的对象
在现实生活中,比如吃东西
狗吃骨头
猫吃鱼
……
多态性就是对象多种表现形式的体现

class Animal{
public void m1(){}
}
class Dog extends Animal{
public void m2(){}
}
class Cat extends Animal{
}
public static void main(String[]
args){
Animal animal=new Dog;
}      


此时animal只能调用父类的方法,即m1如果要调用m2方法得进行强制类型转换

方法的重写

子类继承父类的属性和方法后,如果父类的方法不满足子类的需要,子类可以自己编写继承到的方法也就是重写,当调用方法时会优先子类的方法
重写要注意

  1. 函数返回值类型
  2. 方法名
  3. 参数类型和个数
    这些都要与从父类继承来的方法相同,另外子类的访问修饰符要和父类相同或者更宽,如果子类定义了方法名相同但是形参列表不同的函数,这是方法的重载,不是覆盖。
    在这里要提一下方法的重载:它是在同一个类中处理不同数据的多个相同方法名的多态手段
class Animal{
public void eat(){
System.out.println("吃东西");
}
class Dog extends Animal{
//方法的覆盖
public void eat(){
System.out.println("狗吃东西");
}
//方法的重载
public void eat(Animal a){
System.out.println("金毛吃东西");
}
}
}

这其中执行的顺序是

  1. 先初始化父类在初始化子类
    2.先执行初始化对象中的属性,再执行构造方法中的初始化

封装

封装(关键字private)可以认为是对代码的一个保护屏障,防止该类代码和数据被外部类定义的代码随机的访问,要访问该类的代码和数据,必须通过严格的接口控制一般是get,set方法

class Animal{
//属性私有化
private String name;
private int age;
//无参的构造方法
public Animal(){
}
//有参的构造方法
public Animal(String name,int age){
this.name=name;
this.age=age;
}
//给name赋值
public void setName(String name){
this.name=name;
}
//获取name的值
public String getName(){
return this.name;
}
//age 的方法也一样
……
public static void main(String[]args){
Cat cat=new Cat();
cat.setName("魔法猫咪悠米");
System.out.println(cat.getName());
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值