• 技术文章 >Java >Java基础

    java有哪三大特性

    青灯夜游青灯夜游2023-01-06 14:30:25原创106

    java的三大特性是:1、封装,就是将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。2、继承,就是子类拥有父类的所有属性和方法,从而实现了实现代码的复用。3、多态,就是父类引用指向子类对象,从而产生多种形态。

    本教程操作环境:windows7系统、java8版、DELL G3电脑。

    Java的三大特性

    面向对象三大特性:封装、继承、多态。

    封装:

    继承:

    多态:

    1、封装

    1)什么是封装

    概念:尽可能隐藏对象的内部实现细节,控制对象的修改及访问的权限。

    访问修饰符:private (可将属性修饰为私有,仅本类可见)

    2)公共访问方法

    以访问方法的形式,进而完成赋值与取值操作。

    问题:依旧没有解决到非法数据录入!

    3)示例

    public static void main(String[] args) {
    		int a;
    		Num num = new Num();
    //		传入值100
    		num.setNum(100);
    		System.out.println(num.getNum());
    	}
    private int a;
    
    //	在调用get方法时,返回本类a的值
    	public int getNum() {
    		return a;
    	}
    
    //	接受传入的值100,并赋值给本类的a
    	public void setNum(int num) {
    		this.a = num;
    	}

    4)过滤有效数据

    在公共的访问方法内部,添加逻辑判断,进而过滤掉非法数据,以保证数据安全。

    5)总结

    get/set方法是外界访问对象私有属性的唯一通道,方法内部可对数据进行检测和过滤。

    2、继承

    1)程序中的继承

    2)父类的选择

    3)继承

    语法:class 子类 extends 父类{ } //定义子类时,显示继承父类

    public class 子类名 extends 父类名{
    	
    	//代码块
    	}

    应用:产生继承关系之后,子类可以使用父类中的属性和方法,也可定义子类独有的属性和方法。

    好处:既提高代码的复用性,又提高代码的可扩展性。

    4)继承的特点

    Java为单继承,一个类只能有一个直接父类,但可以多级继承,属性和方法逐级叠加。

    5)不可继承

    构造方法:类中的构造方法,只负责创建本类对象,不可继承。

    private修饰的属性和方法:访问修饰符的一种,仅本类可见。

    父子类不在同一个package中时,default修饰的属性和方法:访问修饰符的一种,仅同包可见。

    3、方法重写

    1)方法的重写/覆盖

    方法重写原则:

    方法重写的执行:

    示例:

    //父类
    public class Animal {
    //	父类中吃的方法会输出“玩玩玩”
    	public void play() {
    		System.out.println("玩玩玩");
    	}
    
    //	父类中睡的方法会输出“睡睡睡”
    	public void sleep() {
    		System.out.println("睡睡睡");
    	}
    
    }
    /**
     * 狗类继承 父类
     */
    public class Dog extends Animal {
    
    //	进行方法重写,将方法重写输出为“狗玩飞碟”
    	public void play() {
    		System.out.println("狗玩飞碟");
    	}
    }
    public class Test {
    
    	public static void main(String[] args) {
    		// 实例化宠物对象
    		Dog d = new Dog();
    		d.play();
    		d.sleep();
    	}
    
    }

    运行输出:

    在这里插入图片描述

    2)方法重写与方法重载的区别

    相同点:方法名相同
    不同点:
    重载:参数列表不同,返回值与访问修饰符无关
    重写:参数列表相同,返回值相同或其子类,访问修饰符不能比父类更严

    4、super关键字

    1)super关键字

    super关键字可在子类中访问父类的方法。

    2)super调用父类无参构造

    super():表示调用父类无参构造方法。如果没有显示书写,隐式存在于子类构造方法的首行。

    3)super调用父类有参构造

    super():表示调用父类无参构造方法。

    super(实参):表示调用父类有参构造方法。
    参构造被执行

    4)this与super

    this或super使用在构造方法中时,都要求在首行。
    当子类构造中使用了this()或this(实参),即不可再同时书写super()或super(实参),会由this()指向构造方法完成super()调用。

    class A{
    		public A(){
    		System.out.println(( "A-无参构造"));
    		}
    		public A(int value) {
    		System.out.println(("A-有参构造")); 
    		}
    		}
    		class B extends A{
    		public B(){
    		super();
    		System.out.println( "B-无参构造");
    		}
    		public B(int value) {
    //		super();这两货不能跟同时存在
    		this();
    		System.out.println(("B-有参构造"));
    		}
    		}

    5、多态

    概念:父类引用指向子类对象,从而产生多种形态。

    二者具有直接或间接的继承关系时,父类引用可指向子类对象,即形成多态。

    父类引用仅可调用父类所声明的属性和方法,不可调用子类独有的属性和方法。

    1)多态的应用

    方法重载可以解决接收不同对象参数的问题,但其缺点也比较明显。

    场景一:使用父类作为方法形参实现多态,使方法参数的类型更为宽泛。

    public class Animal {
    //		父类中吃的方法会输出“玩玩玩”
    	public void play() {
    		System.out.println("玩玩玩");
    	}
    
    //	父类中睡的方法会输出“睡睡睡”
    	public void sleep() {
    		System.out.println("睡睡睡");
    	}
    
    }
    /**
     * 狗类继承 父类
     * 
     * 
     *
     */
    public class Dog extends Animal {
    
    //	狗类特有的方法“狗吃狗粮”
    	public void eat() {
    		System.out.println("狗吃狗粮");
    	}
    
    }
    public class Test {
    
    	public static void main(String[] args) {
    		// 实例化宠物对象
    		Animal d = new Dog();
    		d.play();
    		d.sleep();
    //		The method eat() is undefined for the type Animal
    //		对于类型动物,eat()方法未定义
    //		当我们去调用子类对象的特有方法时,就会爆出上面的错误提示
    //		如果想要实现子类特有方法,就必须要强转
    //		d.eat();
    		((Dog) d).eat();
    	}
    
    }

    运行输出:

    在这里插入图片描述

    场景二:使用父类作为方法返回值实现多态,使方法可以返回不同子类对象。

    示例:

    //动物类  父类
    public class Animal {
    	public void food() {
    		System.out.println("...");
    	}
    }
    //用extends关键字,继承父类属性
    public class Dog extends Animal {
    
    	public void food() {
    		System.out.println("狗吃狗粮");
    	}
    
    	public void runing() {
    		System.out.println("一直跑跑跳跳");
    	}
    }
    //用extends关键字,继承父类属性
    public class Fish extends Animal {
    	public void food() {
    		System.out.println("大鱼吃小鱼,小鱼吃虾米");
    	}
    
    	public void swimming() {
    		System.out.println("小鱼儿,一直游");
    	}
    }
    public class Master {
    //	传入你的动物,并去给它喂食
    	public void food(Animal animal) {
    		System.out.println("喂食");
    		animal.food();
    	}
    }
    import java.util.Scanner;
    
    public class Shopping {
    //	你没有动物,所以animal为空
    	Animal animal = null;
    
    //	判断你要购买的宠物,并返回宠物类(狗、鱼)
    	public Animal shopping(int a) {
    		if (a == 1) {
    			animal = new Dog();
    		} else if (a == 2) {
    			animal = new Fish();
    		}
    //		this.animal=animal;
    		return animal;
    	}
    
    	public void showMenu() {
    		Scanner input = new Scanner(System.in);
    		System.out.println("欢迎来到一只宠物宠物店");
    		System.out.println("请选择喜欢的宠物:");
    		System.out.println("1.狗 2.鱼 ");
    		int a = input.nextInt();
    		Animal animal = shopping(a);
    		Master mm = new Master();
    		mm.food(animal);
    //		用instanceof判断你买的是狗还是鱼。
    //		狗就执行狗的属性和方法,鱼就执行鱼的属性和方法
    		if (animal instanceof Dog) {
    			Dog d = (Dog) animal;
    			d.runing();
    		} else if (animal instanceof Fish) {
    			Fish f = (Fish) animal;
    			f.swimming();
    		}
    
    	}
    }
    //测试类
    public class text {
    	public static void main(String[] args) {
    		Shopping shop = new Shopping();
    		shop.showMenu();
    	}
    }

    运行结果:

    在这里插入图片描述

    2)多态的静态和动态实现

    动态绑定:即为重写/覆盖,方法的重写

    动态绑定也叫后期绑定,在运行时,虚拟机根据具体对象实例的类型进行绑定,或者说是只有对象在虚拟机中运行创建了之后,才能确定方法属于哪一个对象实例的

    静态绑定:即为重载,方法的重载

    一个方法的参数在编译阶段常被静态地绑定,它是根据参数列表的不同来区分不同的函数,通过编辑之后会变成两个不同的函数

    更多编程相关知识,请访问:编程教学!!

    以上就是java有哪三大特性的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:java
    上一篇:java重载与重写的区别是什么 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • Java数据结构之单链表与OJ题• java final关键字的作用是什么• java中值传递和引用传递的区别是什么• java接口的修饰符可以是什么• java实现多线程的几种方式• java注释有哪三种形式
    1/1

    PHP中文网