学习JAVA面向对象——JAVA的三个特征

Java的三个特征:①封装        ②继承        ③多态

  • 封装(Encapsulation)是面向对象的基本特征之一。为实现封装有两个步骤:其一是将成员变量私有化,目的是为了将不能暴露的成员隐藏起来,在定义成员之前添加修饰符private;其二是将成员方法定义为公共的,目的是为了用公共方法来暴露对隐藏成员的访问,在定义成员变量时给函数添加上修饰符public。

代码演示:

//首先创建一个Person类
public class Person  {
    private String name;  // private  私有方法修饰变量,把变量封装起来
    private int age;

//其次构造有参数和无参数方法
    public Person() {     //无参构造方法
    }
    public Person(String name, int age) {    //有参构造方法
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {        //最后重写toString方法
        return "Person{" +"name='" + name + '\'' +", age=" + age +'}";
    }
}
  • 注意事项:

  1. 私有成员只能在定义它的类的内部被访问,在类的外部不能被访问。
  2. 在通常情况下,可以将成员变量定义为private,通过public函数(方法)对其进行访问。如果要给一个成员赋值,可以使用setter函数;如果想要获得该出量的值,可以使用getter函数。
  3. private和public都是访问区分符。
  • 继承(Inheritance)它是是面向对象的重要特征,其中继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类;而多继承是一个子类可以有二个以上的父类。

  • 在Java中,被继承的类成为父类、基类或者超类子类可以直接访问父类中的非私有的属性和行为。

  • 继承是通过 extends 关键字让类与类之间产生继承关系,格式如下:
class 子类 extends 父类{
    代码段;
}

继承的特点:

1.Java只支持单继承,不支持多继承。

//一个类只能有一个父类,不可以有多个父类。
class 子类 extends 父类{}     //正确写法
class 子类 extends 父类1,父类2,父类3...//错误写法

2.Java支持多层(重)继承(继承体系)。

class A{}
class B extends A{}
class C extends B{}

super和this有什么区别

  1. super是一个关键字,代表父类的存储空间标识。
  2. super和this的用法相似
  • this代表对象的引用。
  • super代表当前子类父类的引用。

运用

  1. 当子父类出现同名成员时,可以用super进行区分。
  2. 子类要调用父类构造函数时,可以使用super语句。

多态(Polymorphism)是面向对象的基本特征之一,也是软件工程的重要思想。多态具有表现多种形态的能力的特征,向同一父类的不同子类对象发送同一条消息,行为不同。

多态可以分为静态多态和动态多态。另其中函数的重载是多态的一种,可称为静态多态

动态多态的理论基础是父类引用可以指向子类对象,代码演示如下:

package chenf;
class Dialog{
	public void show() {
		System.out.println("Dialog.show");
	}
}
class FontDialog extends Dialog{
	public void show() {
		System.out.println("FontDialog.show");
	}
}
public class Main {

	public static void main(String[] args) {
		Dialog cf=new FontDialog();      //父类引用指向子类对象。
		cf.show();

	}

}

注:show函数在父类和子类中都存在,其中,如果在子类中没有show函数,则会调用父类的show函数;如果父类中没有show函数,代码则会报错!

多态创建对象:

        1.有继承关系

        2.有方法的重写

        3.父类引用指向子类对象(父像子)(允许将子类类型的指针赋值给父类类型指针)

使用多态:

        1.函数传入的形参可以是父类类型,而实际传入的可以是子类对象

......
public class Main{
     public static void toCenter(Dialog cf){
           cf.show;
        }
    public static void main(String[] args){
       FontDialog cf=new FontDialog();
       toCenter(cf);   //形参是父类,实参是子类,每个子类都可以被这个函数操作
       }

}
  •         2.函数的返回类型是父类类型,而实际返回的可以是子类对象
......
public class Main{
    public static Dialog fun(){
       return FontDialog();
        }
    public static void main(String[] args){
        Dialog dialog=fun();
        dialog.show();
        }
   }

父类和子类对象的类型转换

  1. 根据多态性,子类对象无需转换就可以赋值给父类引用
  2. 严格来讲父类类型对象是无法转换为子类类型的
Dialog dialog=new Dialog();

FontDialog cf=dialog;

错误

但是有一种特殊情况,如果父类类型对象原来就是某一种子类类型对象,则可以转换为相应的子类类型对象,只需强制转换即可

Dialog dialog=new FontDialog();

FontDialog fd=(FontDialog)dialog;

正确

但是有一种特殊情况,如果父类类型对象原来就是某一种子类类型对象,则可以转换为相应的子类类型对象,只需强制转换即可

Dialog dialog=new FontDialog();

FontDialog cf=(FontDialog)dialog;

正确

最后可以用instanceof 函数判断是否是某一类型;格式“对象名 instanceof 类名”,其中正确返回true,错误则返回false。

新手小花在此小露一手,望各位大佬不喜勿喷,不吝赐教,点赞鼓励~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值