Java面向对象的三大特征以及理解

Java面向对象的三大特征以及理解Java面向对象的三大特征为:封装、继承和多态,本文说说我对三大特性的理解。1.封装Java中的封装是指一个类把自己内部的实现细节进行隐藏,只暴露对外的接口(setter和getter方法)。封装又分为属性的封装和方法的封装。把属性定义为私有的,它们通过setter和getter方法来对属性的值进行设定和获取。下面我举一个简单的封装例子publicclassPerson{priva…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Java面向对象的三大特征为:封装、继承和多态,本文说说我对三大特性的理解。

1.封装

Java中的封装是指一个类把自己内部的实现细节进行隐藏,只暴露对外的接口(setter和getter方法)。封装又分为属性的封装和方法的封装。把属性定义为私有的,它们通过setter和getter方法来对属性的值进行设定和获取。下面我举一个简单的封装例子

public class Person {
    private int id;
    private String name;
    private Person person;

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public Person getPerson() {
        return person;
    }

    public void setId(int id) {
        this.id = id;
    }

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

    public void setPerson(Person person) {
        this.person = person;
    }
}

在Person类中,定义了三个成员变量,分别为id name person,它们的访问修饰都是private私有的,通过setter和getter方法对这些变量进行设值以及取值。那么这么做有什么好处呢?封装的意义就是增强类的信息隐藏与模块化,提高安全性。封装的主要作用也是对外部隐藏具体的实现细节,增加程序的安全性。

2.继承

Java中的继承是指在一个现有类(父类)的基础上在构建一个新类(子类),子类可以拥有父类的成员变量以及成员方法(但是不一定能访问或调用,例如父类中private私有的成员变量以及方法不能访问和调用)。继承的作用就是能提高代码的复用性。子类拥有父类中的一切(拥有不一定能使用),它可以访问和使用父类中的非私有成员变量,以及重写父类中的非私有成员方法。

父类:

package cn.csu.ksh;

public class Person {
	private int a=1;//父类私有成员变量
	private int id;
	private String name;
	private int age;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	
	
	public void say() {
		System.out.println("person say..");
	}
	
	public void run() {
		System.out.println("person run....");
	}
	
	//父类的私有方法
	private void show() {
		System.out.println("person show...");
	}
	
}

子类:

package cn.csu.ksh;

public class Student extends Person {
	
	@Override
	public void say() {
		super.say();
	}
	@Override
	public void run() {
		super.run();
	}
	public static void main(String[] args) {
		Student stu = new Student();
		//stu.a=1;//子类对象对父类的私有成员变量使用报错!
		//stu.show();//子类对象调用父类的私有方法,同样报错!
		stu.say();
		stu.run();
		
		
	}
}

继承的好处是实现代码的复用以及扩展,子类通过对父类代码的复用,可以不用再定义父类中已经定义的成员变量,方法上直接对父类的方法进行重写实现了扩展。

多态

多态就是指多种状态,就是说当一个操作在不同的对象时,会产生不同的结果。

在Java中,实现多态的方式有两种,一种是编译时的多态,另外一种是运行时多态,编译时的多态是通过方法的重载实现的,而运行时多态是通过方法的重写实现的。

方法的重载是指在同一个类中,有多个方法名相同的方法,但是这些方法有着不同的参数列表,在编译期我们就可以确定到底调用哪个方法。

方法的重写,子类重写父类中的方法(包括接口的实现),父类的引用不仅可以指向父类的对象,而且还可以指向子类的对象。当父类的引用指向子类的引用时,只有在运行时才能确定调用哪个方法。

其实在运行时的多态的实现,需要满足三个条件:1.继承(包括接口的实现)2.方法的重写 3.父类的引用指向子类对象

并且,我们说的多态都是类中方法的多态,属性是没有多态性的。方法的重载我这里就不举例说明了,我说一下运行时的多态。

接口

package cn.csu.ksh;

public interface Animal {
	void shout();
}

实现类

package cn.csu.ksh;

public class Dog implements Animal{

	@Override
	public void shout() {
		System.out.println("wangwang...");
	}

}

实现类

package cn.csu.ksh;

public class Cat implements Animal {

	@Override
	public void shout() {
		System.out.println("miaomiao...");
	}

}

测试:

package cn.csu.ksh;

public class AnimalTest {
	public static void main(String[] args) {
		//父类的引用指向子类对象
		Animal d = new Dog();
		animalShout(d);
		
		//父类的引用指向子类对象
		Animal c= new Cat();
		animalShout(c);
		
		
		
	}
	
	
	public static void animalShout(Animal animal) {
		animal.shout();
	}
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159965.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)

    Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/119429/BySolomonRutzky,2015/03/11TheSeriesThisarticleispartoftheStairwaySeries:StairwaytoSQLCLRThepossibil

    2022年7月20日
    12
  • php开发微信公众号步骤_PHP接口

    php开发微信公众号步骤_PHP接口最近在帮别人做个小项目,要用到微信公众平台,虽然以前也做过微信开发,但是没有深入的自己去搞一套微信开发的东西(也搞不了,那时候没能力,也弄不到微信公众号),最近开始搞,第一步就是配置微信基本配置(账号注册我就不赘述了)。我们首先要启用服务器配置,并填写URL,token,AESKey,加密方式那么URL怎么填写呢?网上有很多种教程,最靠谱的一种是去新浪云注册个免费的PHP服务器,

    2022年8月20日
    10
  • 使用secureCRT连接超时(最详细最有效的解决,就这一篇就够了)

    使用secureCRT连接超时(最详细最有效的解决,就这一篇就够了)从昨天下午到现在,可谓是一波三折,在网上查阅的文章不下100篇,结果很多都是没用的千篇一律,即使一些浏览器破千的文章,发现都是无头无尾,整个逻辑都很烂,最终通过一次次的失败到最后的成功使我不得不写篇指导,好让你们可以一次性解决问题,减少你们宝贵的时间,话不多话,现在开始吧!(开始之前,确保你们的Linux网络配置可以联网,输入pingwww.baidu.com),若不成功,则先去这里,把网络配…

    2022年5月13日
    61
  • 两万字博文教你python爬虫requests库【详解篇】[通俗易懂]

    两万字博文教你python爬虫requests库【详解篇】[通俗易懂] ????上一篇博文一篇万字博文带你入坑爬虫这条不归路(你还在犹豫什么&抓紧上车)【❤️熬夜整理&建议收藏❤️】被众多爬虫爱好者/想要学习爬虫的小伙伴们阅读之后,很多小伙伴私信我说——大佬搞爬虫都是用的socket套接字嘛????? ????(苦笑)“那肯定不是啊!python为我们封装了那么多伟大而又简单实用的爬虫库,”不过我想说的是,“学啥技术都是从底层抓起,万丈高楼平地起,它也是基于地基稳!所以在入坑文中简单地介绍使用了下底层爬虫库——socket!”???? ????而本文

    2022年5月4日
    32
  • vue双向绑定指令[通俗易懂]

    vue双向绑定指令[通俗易懂]vue双向绑定指令

    2025年11月16日
    2
  • Ubuntu下DNS服务器的配置

    Ubuntu下DNS服务器的配置Ubuntu下DNS服务器的配置——Bind9发表于2017/6/1214:35:49 1220人阅读分类:ubuntu服务器DNS

    2022年5月30日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号