先说说封装:

用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. Spring + qyartz+多任务实现任务调度功能。

    前记:如果配置多个任务不能触发的请仔细检查配置文件!!!!!! 不存在多个同时间任务不能触发的现象!!!! 这个东西记得不要设置成false.如果写了就是true.不写的话默认true. 下面开始贴配 ...

  2. Appium 解决手势密码 java

    if(driver.getPageSource().contains("绘制解锁图案")){//检测是否是有手势密码出现 List<AndroidElement> el ...

  3. Oracle常用数据字典

    1.查看所有存储过程.索引.表格.PACKAGE.PACKAGE BODY select * from user_objects; 2.查询所有的Job select * from user_jobs ...

  4. Spring Hiernate整合

    Spring整合Hibernate 一.整合目标 1.由IoC容器管理Hibernate的SessionFactory2.让Hibernate使用Spring的声明式事务 二.整合步骤 先加入Hibe ...

  5. Android 学习笔记之 Actionbar作为回到上一级

    首先,给Actionbar添加返回图标: 代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea ...

  6. JavaScript高级内容:原型链、继承、执行上下文、作用域链、闭包

    了解这些问题,我先一步步来看,先从基础说起,然后引出这些概念. 本文只用实例验证结果,并做简要说明,给大家增加些印象,因为单独一项拿出来都需要大篇幅讲解. 1.值类型 & 引用类型 funct ...

  7. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  8. Java 判断回文字符串有多少和其中的最大字符串

    一.简介代码功能 该代码的功能可以实现对任意的一段字符串进行判断是否有回文,回文有哪些,和其中的最大回文. 二.代码部分 1.全局变量 static String hws = "" ...

  9. css3 新属性

    一 选择器1 兄弟选择器 0 以第一个选择器开始,往后找满足条件的兄弟节点 class~class() <-- lorem+数字 -tab --> 可以输出默认文字2 属性选择器 标签[a ...

  10. 有关 json对象 取出其中数据问题

    这几天,在做一个ajax异步提交的小功能,发现从ashx中传递过来的string 类型的数据,一直拿不到(当时是指的是json点不出来),傻傻的自己,一直在找其他的方法,看看其他那里出了错误,最后,那 ...