封装

封装就是将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏。做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(setter)方法,用于对这些属性的访问。

public class Person
{
private String name; //姓名
private int age; //年龄
private String phone; //联系电话
private String address; //家庭住址 public String getName()
{
return name;
} public void setName(String name)
{
this.name=name;
} public int getAge()
{
return age;
} public void setAge(int age)//封装的常用表现,在内部进行业务逻辑的控制,外部只调用即可
{
if(age<18||age>40)//对年龄进行限制
{
System.out.println("年龄必须在18到40之间!");
this.age=20; //默认年龄
}
else
{
this.age=age;
}
} public String getPhone()
{
return phone;
} public void setPhone(String phone)
{
this.phone=phone;
} public String getAddress()
{
return address;
} public void setAddress(String address)
{
this.address=address;
}
}

继承

继承是代码复用的一种形式,即在具有包含关系的类中,从属类继承主类的全部属性和方法,从而减少了代码冗余,提高了程序运行效率。例如,一个矩形(Rectangle类)属于四边形(Quadrilateral),正方形、平行四边形和梯形同样都属于四边形。从类的角度来解释,可以说成 Rectangle 类是从 Quadrilateral 类继承而来的,其中 Quadrilateral 类是基类,Rectangle 类是派生类。

继承是通过扩展其他类而形成新类来实现的,原来的类称为父类(super class)或基类,新类称为原来类的子类或派生类。在子类中,不仅包含父类的属性和方法,还可以增加新的属性和方法,使得父类的基本特征可被所有子类的对象共享。类的继承并不改变类成员的访问权限。也就是说,如果父类的成员是公有的、被保护的或默认的,它的子类仍具有相应的这些特性。

class class_name extends extend_class
{
//类的主体
}
public class Person
{
public String name; //姓名
public int age; //年龄
public String sex; //性别
}
public class Student extends Person
{
private String stuNo; //学号
private String department; //所学专业
}
//学生继承了人类,同时具有了,姓名、年龄、性别属性

多态

多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

对面向对象来说,多态分为编译时多态和运行时多态。其中编译时多态是静态的,主要是指方法的重载,它是根据参数列表的不同来区分不同的方法。通过编译之后会变成两个不同的方法,在运行时谈不上多态。而运行时多态是动态的,它是通过动态绑定来实现的,也就是大家通常所说的多态性。

public class Figure
{
double dim1;
double dim2;
Figure(double d1,double d2)//有参的构造方法
{
this.dim1=d1;
this.dim2=d2;
}
double area()//用于计算对象的面积
{
System.out.println("通过多态,在子类中重写。");
return 0;
}
}
public class Rectangle extends Figure
{
Rectangle(double d1,double d2)
{
super(d1,d2);
}
double area()
{
System.out.println("长方形的面积:");
return super.dim1*super.dim2;
}
}
public class Triangle extends Figure
{
Triangle(double d1,double d2)
{
super(d1,d2);
}
double area()
{
System.out.println("三角形的面积:");
return super.dim1*super.dim2/2;
}
}
public static void main(String[] args)
{
Figure figure; //声明Figure类的变量
figure=new Rectangle(9,9);
System.out.println(figure.area()); //输出:长方形的面积:81。
figure=new Triangle(6,8);
System.out.println(figure.area()); //输出:三角形的面积:24。
}

重载

重载是 Java 多态性的表现。在 Java 语言中,同一个类中的两个或多个方法可以共享同一个名称,只要它们的参数声明不同即可,这种情况被称为方法重载

在 JDK 的 java.io.PrintStream 中定义了十多个同名的 println() 方法

public void printin(int i){…}
public void println(double d){…}
public void println(String s){…}
System.out.println(102); //调用println(int i)方法
System.out.println(102.25); //调用println(double d)方法
System.out.println("价格为 102.25"); //调用println(String s)方法

方法重载时必须要注意以下两点:

重载方法的参数列表必须和被重载的方法不同,并且这种不同必须足以清楚地确定要调用哪一个方法。

重载方法的返回值类型可以和被重载的方法相同,也可以不同,但是只有返回值类型不同不能表示为重载。

pubic class Person{
private String name;
//方法一
public Person(){
}
//重载方法,可直接设置姓名
public Person(String _name){
this.name = _name;
}
}

重写

子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写,又称为方法覆盖。

在重写方法时,需要遵循下面的规则:

参数列表必须完全与被重写的方法参数列表相同,否则不能称其为重写。

返回的类型必须与被重写的方法的返回类型相同,否则不能称其为重写。

访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)。

重写方法一定不能抛出新的检査异常或者比被重写方法声明更加宽泛的检査型异常。例女口,父类的一个方法声明了一个检査异常 IOException,在重写这个方法时就不能抛出 Exception,只能拋出 IOException 的子类异常,可以抛出非检査异常。

public class Person
{
public String name; //名字
public int age; //年龄
public Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getInfo()
{
return "我叫"+name+",今年"+age+"岁";
}
}
public class Student extends Person
{
private String hobby;
public Student(String name,int age,String hobby)
{
super(name,age);
this.hobby=hobby;
}
public String getInfo()
{
return"我叫"+this.name+",我今年"+this.age+"岁,我爱吃"+hobby+"。";
}
}
public static void main(String[] args)
{
Person person=new Student("小明",20,"鸡");
System.out.println(animal.getInfo()); //输出:我叫小明,我今年20岁,我爱吃鸡。
}

Java入门教程九(封装继承多态)的更多相关文章

  1. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  2. JAVA的三大特征 封装继承多态- 简单总结

    简单总结一下 封装-即从很多类的抽取相同的代码 写在一个类里. 好处是 代码的重用,安全. 继承-减少代码的书写. 其好处也是 代码的重用. 多态- 把不同的子类对象都当作父类来看,可以屏蔽不同子类对 ...

  3. 深入理解Java面向对象三大特性 封装 继承 多态

    1.封装 封装的定义: 首先是抽象,把事物抽象成一个类,其次才是封装,将事物拥有的属性和动作隐藏起来,只保留特定的方法与外界联系 为什么需要封装: 封装符合面向对象设计原则的第一条:单一性原则,一个类 ...

  4. Java三大特征:封装 继承 多态

    内部类:成员内部类.静态内部类.方法内部类.匿名内部类. 内部类:定义在另外一个类里面的类,与之对应,包含内部类的外部类被称为外部类. 内部类的作用:(1)内部类提供了更好的封装,可以把内部类隐藏在外 ...

  5. Java基础之理解封装,继承,多态三大特性

    目录 封装 继承 多态 封装 封装隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据.对外界而已它的内部细节是隐藏的,暴露给外界的只是它的访问方法. 代码理解 publ ...

  6. java面向对象(封装-继承-多态)

    框架图 理解面向对象 面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程强调的是功能行为 面向对象将功能封装进对象,强调具备了功能的对象. 面向对象是基于面向过程的. 面向对象的特点 ...

  7. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  8. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  9. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

随机推荐

  1. 图遍历算法的应用(包括输出长度为l的路径最短最长路径)

    判断从顶点u到v是否有路径 void ExistPath(AdjGraph* G, int u, int v, bool& has) { int w; ArcNode* p; visit[u] ...

  2. MFC的cstring判断是否存在中文字符

    bool IsChinese(CString Cstr) { int nLen = Cstr.GetLength(); unsigned char ch1, ch2; for (int i = 0; ...

  3. windows10使用npm安装vue、vue-cli

    从网上下载了一个免费的vue.js前端模板,准备和Django整合出一个项目出来,然后发现前端代码都是.vue文件,已经整合过.html,很容易,感觉这个.vue的前端稍微复杂一些 本文主要参考博客及 ...

  4. 透过F5获取服务器真实内网IP

    渗透测试过程中,经常会遇到目标服务器使用F5 LTM做负载均衡. 如果能获取到目标服务器的真实IP地址,会给后续渗透带来一定便利. 本文既是最近渗透遇到的一点点经验分享. F5修改cookie机制 F ...

  5. sequelize 应用hook 实现对分表的访问

    https://github.com/cclient/sequelize-shardinghttps://www.npmjs.com/package/sequelize-sharding 实际有效的代 ...

  6. Jarque-Bera test|pp图|K-S检验|

    Jarque-Bera test: 如何绘制pp图?   找该直线的截距和斜率,通过截距和斜率的值找到正态参数均值和方差,可对这些正态参数进行正态检验. K-S检验的的特点? 并不是只针对正态分布,是 ...

  7. VSTO开发中级教程 配套资源下载

    项目实例源代码: 编程过程中用到的工具.软件: 教学视频:

  8. 吴裕雄 python 神经网络——TensorFlow 卷积神经网络水果图片识别

    #-*- coding:utf- -*- import time import keras import skimage import numpy as np import tensorflow as ...

  9. String的compareTo用法

    String的compareTo其实就是依次比较两个字符串ASC码.如果两个字符的ASC码相等则继续后续比较,否则直接返回两个ASC的差值.如果两个字符串完全一样,则返回0.来看一下代码. publi ...

  10. Spring中Bean的不同配置方式

    Bean的配置方式一共分为三种: 1.基于XML(适用于第三方类库,无法在类中写注解以及写命名空间的配置等情况) 2.基于注解(适用于大部分情况) 3.基于Java类 以下是三种不同情况的配置方式   ...