先说说封装:

用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学习笔记——封装、继承和多态的更多相关文章

  1. 0022 Java学习笔记-面向对象-继承、多态、组合

    继承的特点 单继承:每个子类最多只有一个直接父类,注意是直接父类,间接父类个数不限 注意父类的概念:A-->B-->C-->D,在这里,ABC都是D的父类,C是D的直接父类,AB是D ...

  2. C++学习笔记 封装 继承 多态 重写 重载 重定义

    C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...

  3. Java 学习笔记(7)——接口与多态

    上一篇说了Java面向对象中的继承关系,在继承中说到:调用对象中的成员变量时,根据引用类型来决定调用谁,而调用成员方法时由于多态的存在,具体调用谁的方法需要根据new出来的对象决定,这篇主要描述的是J ...

  4. Java 学习笔记(6)——继承

    之前说过了Java中面向对象的第一个特征--封装,这篇来讲它的第二个特征--继承.一般在程序设计中,继承是为了减少重复代码. 继承的基本介绍 public class Child extends Pa ...

  5. 1.8(java学习笔记)继承与方法的重写

    继承 在java中可以通过继承提高代码的复用率. 例如A继承了B,就可以是 例如,首先有一个类似Person,这个类中有有一些属性和方法,我们再新建一个Student类,其中有一部分属性和方法与Per ...

  6. Java编程思想学习笔记_2(继承和多态)

    静态初始化: 静态初始化只在必要的时刻进行.(即当程序需要加载类进入内存的时候,执行静态初始化.静态变量和静态代码块的初始化顺序,按照在代码中声明的顺序老执行.例如:如果要执行某个public类,那么 ...

  7. Java学习笔记(十)——多态

    一.多态 1.对象的多种形态 (1)引用多态: 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 (2)方法多态: 创建本类对象时,调用的方法为本类方法: 创建子类对象时,调用的方法是子类方 ...

  8. Java学习笔记之继承

    一.继承的基础 在Java术语中,被继承的类叫超类(superclass)或者父类,继承超类的类叫子类(subclass). 举例说明: class Box { public double width ...

  9. Java学习笔记之——继承

    父类(基类):动物 子类:猫.狗.狼.老虎 如果子类继承于父类,则会自动拥有父类的所有非私有属性和方法,不会继承构造方法 父类和子类要满足一种关系:子类是父类的一种 Java中只支持单继承:一个子类只 ...

随机推荐

  1. IOS开发创建开发证书及发布App应用(六)——打包应用

    6.打包应用 如下图,生成之后点击下面红框的按钮,按时间排序,然后点最新的一次生成 从右侧生成日志中找到如下图红框标识的部分,找到 -output ,把下面浅蓝色选中,这是app生成的文件夹路径 点击 ...

  2. 【转】JS判断SWF,JPG加载完毕、兼容(Activex,plugIn)所有浏览器

    JS判断SWF,JPG加载完毕.兼容(Activex,plugIn)所有浏览器 这里主要说下监听SWF的加载. 网上流传已久的监听方法,只能在IE(Activex插件下)下实现.在使用plugin的浏 ...

  3. 老李分享:《Linux Shell脚本攻略》 要点(三)

    老李分享:<Linux Shell脚本攻略> 要点(三)   1.生产任意大小的文件 [root@localhost dd_test]#[root@localhost dd_test]# ...

  4. (转)Java线程面试题 Top 50

    原文链接:http://www.importnew.com/12773.html   本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末 ...

  5. 微软在.NET官网上线.NET 架构指南频道

    微软在Visual Studio 2017 正式发布的时候也上线了一个参考应用https://github.com/dotnet/eShopOnContainers , 最近微软给这个参考应用写了完善 ...

  6. Invalid command 'RailsBaseURI'

    官方指导 http://www.redmine.org/projects/redmine/wiki/HowTo_Install_Redmine_on_Ubuntu_step_by_step   解决使 ...

  7. PixiJS - 基于 WebGL 的超快 HTML5 2D 渲染引擎

    Pixi.js 是一个开源的HTML5 2D 渲染引擎,使用 WebGL 实现,不支持的浏览器会自动降低到 Canvas 实现.PixiJS 的目标是提供一个快速且轻量级的2D库,并能兼容所有设备.此 ...

  8. 美团点评DBProxy读写分离使用说明

    目的 因为业务架构上需要实现读写分离,刚好前段时间美团点评开源了在360Atlas基础上开发的读写分离中间件DBProxy,关于其介绍在官方文档已经有很详细的说明了,其特性主要有:读写分离.负载均衡. ...

  9. nginx源码编译问题

    [root@localhost nginx-1.7.4]# ./configure checking for OS + Linux 2.6.32-431.el6.x86_64 x86_64 check ...

  10. 一条SQL搞定信息增益的计算

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 周东谕,2011年加入腾讯,现任职于腾讯互娱运营部数据中心,主要从事游戏相关的数据分析和挖掘工作. 信息增益原 ...