目录
4)过滤有效数据" >4)过滤有效数据
5)总结" >5)总结
1)程序中的继承" >1)程序中的继承
2)父类的选择" >2)父类的选择
3)继承" >3)继承
4)继承的特点" >4)继承的特点
5)不可继承" >5)不可继承
1)方法的重写/覆盖" >1)方法的重写/覆盖
2)方法重写与方法重载的区别" >2)方法重写与方法重载的区别
1)super关键字" >1)super关键字
2)super调用父类无参构造" >2)super调用父类无参构造
3)super调用父类有参构造" >3)super调用父类有参构造
4)this与super" >4)this与super
1)多态的应用" >1)多态的应用
首页 Java Java基础 java有哪三大特性

java有哪三大特性

Jan 06, 2023 pm 02:30 PM
java

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

java有哪三大特性

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

Java的三大特性

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

封装:

  • 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

继承:

  • 子类拥有父类的所有属性和方法(除了private修饰的属性不能拥有),从而实现了实现代码的复用;

多态:

  • 使用父类引用接受,不同的子类的对象实例,父类引用调用相同的方法,根据子类不同的实例,产生不同的结果

1、封装

1)什么是封装

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

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

2)公共访问方法

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

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

  • 提供公共访问方法,以保证数据的正常录入。
  • 命名规范:
  • 赋值:setXXX() //使用方法参数实现赋值
  • 取值:getXXX() //使用方法返回值实现取值

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)程序中的继承

  • 程序中的继承,是类与类之间特征和行为的一种赠与或获得。
  • 两个类之间的继承关系,必须满足“is a”的关系。

2)父类的选择

  • 现实生活中,很多类别之间都存在着继承关系,都满足“is a”的关系。

  • 狗是一种动物、狗是一种生物、狗是一种物质。

  • 多个类别都可作为“狗”的父类,需要从中选择出最适合的父类。

  • 功能越精细,重合点越多,越接近直接父类。

  • 功能越粗略,重合点越少,越接近Object类。(万物皆对象的概念)

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关键字可在子类中访问父类的方法。

  • 使用”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)多态的应用

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

  • 首先,随着子类的增加,Master类需要继续提供大量的方法重载,多次修改并重新编译源文件。
  • 其次,每一个feed方法与某一种具体类型形成了密不可分的关系,耦合太高。

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

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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java 中的完美数 Java 中的完美数 Aug 30, 2024 pm 04:28 PM

Java 完美数指南。这里我们讨论定义,如何在 Java 中检查完美数?,示例和代码实现。

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。这里我们通过示例讨论简介、如何使用weka java、平台类型和优点。

Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

Java 史密斯数指南。这里我们讨论定义,如何在Java中检查史密斯号?带有代码实现的示例。

Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

在本文中,我们保留了最常被问到的 Java Spring 面试问题及其详细答案。这样你就可以顺利通过面试。

突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一种强大且表达力丰富的处理数据集合的方式。然而,使用Stream时,一个常见问题是:如何从forEach操作中中断或返回? 传统循环允许提前中断或返回,但Stream的forEach方法并不直接支持这种方式。本文将解释原因,并探讨在Stream处理系统中实现提前终止的替代方法。 延伸阅读: Java Stream API改进 理解Stream forEach forEach方法是一个终端操作,它对Stream中的每个元素执行一个操作。它的设计意图是处

Java 中的时间戳至今 Java 中的时间戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的时间戳到日期指南。这里我们还结合示例讨论了介绍以及如何在java中将时间戳转换为日期。

Java程序查找胶囊的体积 Java程序查找胶囊的体积 Feb 07, 2025 am 11:37 AM

胶囊是一种三维几何图形,由一个圆柱体和两端各一个半球体组成。胶囊的体积可以通过将圆柱体的体积和两端半球体的体积相加来计算。本教程将讨论如何使用不同的方法在Java中计算给定胶囊的体积。 胶囊体积公式 胶囊体积的公式如下: 胶囊体积 = 圆柱体体积 两个半球体体积 其中, r: 半球体的半径。 h: 圆柱体的高度(不包括半球体)。 例子 1 输入 半径 = 5 单位 高度 = 10 单位 输出 体积 = 1570.8 立方单位 解释 使用公式计算体积: 体积 = π × r2 × h (4

如何在Spring Tool Suite中运行第一个春季启动应用程序? 如何在Spring Tool Suite中运行第一个春季启动应用程序? Feb 07, 2025 pm 12:11 PM

Spring Boot简化了可靠,可扩展和生产就绪的Java应用的创建,从而彻底改变了Java开发。 它的“惯例惯例”方法(春季生态系统固有的惯例),最小化手动设置

See all articles