三大特性

本文介绍了Java的三大特性:封装中属性的private与public区别,通过set/get方法保护数据安全;继承实现代码复用,包括访问权限控制和方法覆盖;多态展示父类引用指向子类的灵活性,涉及类型转换和多态应用。
摘要由CSDN通过智能技术生成

Java的三大特性

一、封装

  1. 修饰符public和private

    1. public代表公开的,在任何位置都可以访问被public修饰的成员

      public class Student {
      	public String name = "zhangs";
      }
      class Test{
      	public static void main(String[] args) {
      		Student s = new Student();
      		String name = s.name;
      	}
      }
      
    2. private代表私有的,被private修饰的成员仅在本类中可以被访问

      public class Student {
      	private String name = "zhangs";
      }
      class Test{
      	public static void main(String[] args) {
      		Student s = new Student();
      		String name = s.name;//编译报错,无法访问被private修饰的属性
      	}
      }
      
  2. 封装的方式:

    1. 将属性使用private修饰

    2. 为属性提供相应的公开的通道方法,即set/get方法

      public class Student {
      	private String name;
      
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      }
      
      1. set方法:用于对属性的值进行设置

        public void set属性名(属性声明){
            this.属性名 = 形参名;
        }
        
      2. get方法:用于获取属性中存储的值

        public 数据类型 get属性名(){
            return this.属性;
        }
        
    3. 封装如何保护数据安全的:可以在方法中写入数据安全相关的代码,用来对数据的安全进行保护

    4. 通道方法的使用:

      public class Student {
      	private String name;
      
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      }
      class Test{
      	public static void main(String[] args) {
      		Student s = new Student();
      		s.setName("zhangs");//通过set方法为属性赋值
      		//省略业务代码
      		String name = s.getName();//通过get方法获取属性的值
      	}
      }
      

二、继承

  1. 概念:继承是体现两个类之间具有 A类 是一个 B类 中的一种 的表现

  2. 语法:在类声明的时候使用extends关键字

    class SuperClass{//父类
    }
    class SubClass extends SuperClass{//子类的继承语法
    }
    
  3. 优点:

    1. 子类通过继承访问父类的成员,提高了代码的可复用性和可拓展性
    2. 开发的时候不能强行使用继承关系,应该符合客观
  4. 访问修饰符:子类对父类成员访问权限的限制条件

    本类同包子类任何
    private×××
    (default)××
    protected×
    public
    1. 构造方法无法被继承
    2. 四个修饰符都可以用来修饰成员变量,成员方法,构造方法
    3. public和default可以修饰类
  5. 方法的覆盖(override)

    1. 概念:在子类中使用独特的实现
    2. 语法:方法名相同,返回值类型相同,参数列表相同,访问修饰符较父类相同或者更宽
    3. 覆盖的检查:使用@Override注解进行语法的检查
    class SuperClass {
    	protected void menthod(int a) {
    
    	}
    }
    
    class SubClass extends SuperClass {
    	@Override
    	public void menthod(int a) {
    
    	}
    }
    
  6. 继承关系中,对象的创建过程

    1. 分配空间:对父类和子类所有属性赋予默认值
    2. 虚拟机调用构造方法:
      1. 构建父类对象
        1. 构建父类对象
        2. 初始化属性:对所有属性赋予初始值
        3. 执行构造法中的代码:通过构造参数的传递进行属性的赋值
      2. 初始化属性:对所有属性赋予初始值
      3. 执行构造法中的代码:通过构造参数的传递进行属性的赋值
  7. Java中的继承关系:Java是单继承,即一个类,只能有一个直接的父类,但可以有多个间接父类

  8. 构造方法无法被继承:

    构造方法的语法中明确说明了,构造方法的方法名必须和类名保持一致

  9. super关键字的使用:

    1. super. 的使用方式

      1. super.属性名:访问父类的成员变量
        **注意:**父类中必须具有该属性,否则编译报错

        class SuperClass {
        	public String name;
        }
        
        class SubClass extends SuperClass {
        	public String name;
        	public void method() {
        		System.out.println(name);//访问本类的成员变量
        		System.out.println(super.name);//访问父类的成员变量
        	}
        }
        
      2. super.方法名(实参列表):访问父类的成员方法
        **注意:**父类中必须具有该方法,并且参数列表能够匹配,否则编译报错

        class SuperClass {
        	public void superMethod(int a) {
        		
        	}
        }
        
        class SubClass extends SuperClass {
        	public void subMethod(){
        		super.superMethod(3);//调用父类中的成员方法
        	}
        }
        
    2. super() 的使用方式:

      1. super()或者super(实参),代表调用父类的构造方法

        class SuperClass {
        	public String name;
        
        	public SuperClass(String name) {
        		this.name = name;
        	}
        
        	public SuperClass() {
        	}
        	
        }
        
        class SubClass extends SuperClass {
        
        	public SubClass() {
        		super();//指引虚拟机创建对象的时候,使用无参数构造方法
        	}
        
        	public SubClass(String name) {//可以通过构造方法给父类属性赋值
        		super(name);//指引虚拟机创建对象的时候,使用有参数构造方法
        	}
        	
        }
        
      2. super()或者super(实参)必须声明在构造方法的第一行有效语句

      3. 如果在一个构造方法中没有显示声明super()或者super(实参),则默认为super()。

      4. 当第一行有效语句为this()时,不能声明super(),虚拟机会根据this()的指引寻找对应的构造方法

三、多态

  1. 基本语法:

    1. 在继承关系中

    2. 父类引用指向子类对象

    3. 子类覆盖父类的方法

      public class Test {
      	public static void main(String[] args) {
      		//父类引用指向子类对象
      		Animal a = new Dog();
      	}
      }
      class Animal{
      	public void eat(){
      		System.out.println("Animal eating");
      	}
      }
      class Dog extends Animal{//继承关系
      	@Override//覆盖父类的方法
      	public void eat(){
      		System.out.println("Dog eating");
      	}
      }
      
    4. 只能调用引用类型中所声明的成员方法(编译期进行检查)

    5. 运行时,如果子类覆盖了父类的方法,那么使用子类的实现

    6. 对象的实际类型不会因为其引用类型的改变而改变,当对象创建之后,其类型就不能被改变了

  2. 引用之间的转换

    1. 在多态中,如果需要调用子类独特的方法,需要将引用类型转换为子类类型

    2. 转换需要使用强制类型转换:

      1. 语法:子类数据类型 变量名 = (子类数据类型)变量名;

        public class Test {
        	public static void main(String[] args) {
        		Animal a = new Dog();
        		Dog d = (Dog)a;//强制类型转换
        	}
        }
        class Animal{
        }
        class Dog extends Animal{
        }
        
      2. 只要引用类型间存在继承关系,那么编译一定通过,但是运行时可能出现异常(ClassCastException,类型转换异常)

      public class Test {
      	public static void main(String[] args) {
      		Animal a = new Dog();
      		Dog d1 = (Dog)a;//运行时正常
      		
      		Animal b = new Cat();
      		Dog d2 = (Dog)b;//运行时异常
      	}
      }
      class Animal{}
      class Dog extends Animal{}
      class Cat extends Animal{}
      
    3. instanceof关键字:为了避免类型转换异常

      1. 语法:对象 instanceof 类,结果为boolean类型,判断对象的实际类型是否属于该类
      2. 代码
      public class Test {
      	public static void main(String[] args) {
      		Animal a = new Dog();
      		if(a instanceof Dog){//true
      			Dog d1 = (Dog)a;
      		}
      		Animal b = new Cat();
      		if(b instanceof Dog){//false
      			Dog d2 = (Dog)b;
      		}
      	}
      }
      class Animal{}
      class Dog extends Animal{}
      class Cat extends Animal{}
      
  3. 多态的应用

    1. 应用于数组:可以在数组中存储自身及其所有子类类型的对象
    2. 应用于参数:可以在传参数的时候传入自身及其子类类型的对象
    3. 应用于返回:可以返回自身及其所有子类类型的对象
  4. 多态的好处

    1. 屏蔽子类之间的差异
    2. 对不同类型的子类对象批量进行管理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值