Java学习笔记——封装、继承和多态
先说说封装:
用new 一条狗来举个例子:
public class Dog {
//私有化字段
private String name;
private int age;
//无参构造
Dog(){
}
//带参构造
Dog(String name,int age){
this.name = name;
this.age = age;
}
//setter and getter 方法
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;
}
}
私有化成员变量后就不能直接使用 object.name 的形式改变字段值了。可以使用构造函数初始化字段值或者使用getter setter方法获取、改变字段值。
public class MyMain {
public static void main(String[] args) {
Dog dog = new Dog("旺旺", 3);//创建Dog对象并初始化dog:旺旺,3
Dog dog2 = new Dog();
dog2.setName("张三");//使用setter方法
dog2.setAge(15);//dog2:张三,15
}
}
然后是继承:
父类是Pet 类:
public abstract class Pet {
private String name;
private int age;
public Pet(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Pet(){
print();//虽然编译不报错,但是最好不要这么写,父类构造中调用可被子类覆盖的方法破坏封装
}
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;
}
public abstract void print();//抽象类可以有抽象方法和非抽象方法,但是非抽象类不能有抽象方法;抽象方法不是类方法,不能用static修饰
abstract int calc(int i) throws ArithmeticException;//测试子类抛出异常范围
}
子类是Penguin 类:
public class Penguin extends Pet{
private int love;
public Penguin(String name, int age, int love) {
super(name, age);
this.love = love;
}
public Penguin(){
super();
}
public int getLove() {
return love;
}
public void setLove(int love) {
this.love = love;
}
@Override//方法名相同,参数列表相同,返回值类型相同
public void print() {//子类重写父类方法不能减少其访问权限,这里使用非public会报错
//原因:父类引用指向子类对象,如果子类方法访问权限少,那么将会导致方法调用者可调用父类方法却不能调用子类的重写方法.
// TODO Auto-generated method stub
System.out.println("我是:"+this.getName()+"年龄:"+this.getAge()+"健康值"+this.getLove());
}
@Override
int calc(int i) throws ArithmeticException{//子类重写父类方法不能抛出更多的异常,这里抛出Exception或其他异常会报错
//原因:父类引用指向子类对象,如果子类抛出更多的异常,那么将会导致方法调用者try-catch父类异常时忽略了子类更多的异常(catch不到)
// TODO Auto-generated method stub
return 1/i;
}
}
测试类:
public class MyMain {
public static void main(String[] args) {
Pet penguin = new Penguin();//父类变量 指向 子类对象,父类引用 指向 子类对象;向上转型(子类转父类)
penguin.setName("张三");
penguin.setAge(18);
penguin.print();//多态
//penguin.setLove(100);报错,只能调用父类方法表中的方法
Penguin p = (Penguin)penguin;//向下转型(父类转子类)
p.setLove(100);
penguin = (Pet)p;//向上转型
penguin.print();
p = (Penguin)penguin;//向下转型
p.print();
penguin = new Penguin("小企鹅", 6, 100);
penguin.print();
int t;
try {
t = penguin.calc(0);
System.out.println(t);
} catch (ArithmeticException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
System.out.println("除数不能是0!");
}
System.out.println("end ..");
}
}
最后说说多态,
上面代码第4行Pet penguin = new Penguin();已经体现了多态,再写个多态的典型例子——主人给宠物喂食:
public class MyMain {
public static void main(String[] args) {
Pet dog = new Dog();
Pet cat = new Cat();
Person.feeding(dog);
Person.feeding(cat);
}
}
public abstract class Pet {
public abstract void eat();
}
public class Dog extends Pet {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("够吃骨头...");
}
}
public class Cat extends Pet {
@Override
public void eat() {
// TODO Auto-generated method stub
System.out.println("猫吃鱼...");
}
}
public class Person {
public static void feeding(Pet pet) {
// TODO Auto-generated method stub
pet.eat();
}
}
附上思维导图:

Java学习笔记——封装、继承和多态的更多相关文章
- 0022 Java学习笔记-面向对象-继承、多态、组合
继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...
- C++学习笔记 封装 继承 多态 重写 重载 重定义
C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...
- Java 学习笔记(7)——接口与多态
上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...
- Java 学习笔记(6)——继承
之前说过了Java中面向对象的第一个特征--封装,这篇来讲它的第二个特征--继承.一般在程序设计中,继承是为了减少重复代码. 继承的基本介绍 public class Child extends Pa ...
- 1.8(java学习笔记)继承与方法的重写
继承 在java中可以通过继承提高代码的复用率. 例如A继承了B,就可以是 例如,首先有一个类似Person,这个类中有有一些属性和方法,我们再新建一个Student类,其中有一部分属性和方法与Per ...
- Java编程思想学习笔记_2(继承和多态)
静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...
- Java学习笔记(十)——多态
一.多态 1.对象的多种形态 (1)引用多态: 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 (2)方法多态: 创建本类对象时,调用的方法为本类方法: 创建子类对象时,调用的方法是子类方 ...
- Java学习笔记之继承
一.继承的基础 在Java术语中,被继承的类叫超类(superclass)或者父类,继承超类的类叫子类(subclass). 举例说明: class Box { public double width ...
- Java学习笔记之——继承
父类(基类):动物 子类:猫.狗.狼.老虎 如果子类继承于父类,则会自动拥有父类的所有非私有属性和方法,不会继承构造方法 父类和子类要满足一种关系:子类是父类的一种 Java中只支持单继承:一个子类只 ...
随机推荐
- js放大镜
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- win32 htmlayout点击按钮创建新窗口,以及按钮图片样式
最近在做一个C++ win32的桌面图形程序,我不是C++程序员,做这个只是因为最近没什么java的活. windows api,之前接触的时候,还是大学,那时用这个开发打飞机游戏纯粹是娱乐.现在基本 ...
- 老李推荐:第1章2节《MonkeyRunner源码剖析》概述:边界
老李推荐:第1章2节<MonkeyRunner源码剖析>概述:边界 边界 怎么样才算分析清楚一个事物的原理是什么呢?就以前面提到的<LINUX内核源代码情景分析>为例子,分 ...
- liunx文件与用户和群组
文件基本属性 在图片中alogrithm的文件属性为drwxrwxr-x,其中d代表此文件为目录. 后面rwx,rwx,r-x分别代表文件所属者(ower),组(group),其他用户(other)的 ...
- 云计算之路-阿里云上:RDS数据库连接数过万引发故障,主备库切换后恢复正常
非常抱歉!今天 12:03-12:52 ,由于数据库连接数异常突增超过1万,达到了阿里云RDS的最大连接数限制,影响了全站的正常访问.由此给您带来麻烦,请您谅解. 在发现数据库连接数突增的问题后,我们 ...
- Java Stream API性能测试
已经对Stream API的用法鼓吹够多了,用起简洁直观,但性能到底怎么样呢?会不会有很高的性能损失?本节我们对Stream API的性能一探究竟. 为保证测试结果真实可信,我们将JVM运行在-ser ...
- Centos安装MySql、Java、Tomcat
一.安装MySql 安装MySql yum install -y mysql-server mysql mysql-devel 启动MySql服务 service mysqld start 为root ...
- 告别S! S! H!秒杀终端工具——FastLogin快捷登录
题记:自从接触到"跳板机"的概念后,一直就被烦不胜烦的机器名,ip地址,用户名,密码折腾的死去活来,心说能有个小精灵随时帮我输入那些重复的登录信息就好了.我见过最挫的方式就是用记事 ...
- android正则表达式隐藏邮箱地址中间字符
// String emailStr = email.substring(0, email.lastIndexOf("@"));// if (emailStr.length() & ...
- JVM知识在离线数据中的运用
又是飞花的季节了.多愁善感的林妹妹看到柳絮说:“嫁与东风春不管,凭尔去,忍淹留.”宝姐姐看了却来一句:“好风凭借力送我上青云”. 特别羡慕情商高的人,经常在想他们是怎么做到的.从来看不出他们不喜欢谁, ...