封装

1、概念:

  将类的某些信息隐藏在类的内部,不允许外部程序访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

2、好处:

a.只能通过规定的方法访问数据

b.隐藏类的实例细节,方便修改和实现

3、封装的实现步骤

①修改属性的可见性——设为private

②创建getter/setter方法,用于属性的读写

③在getter/setter方法中加入属性控制语句,对属性值的合法性进行判断

继承

继承是类与类的一种关系,例如:动物和狗的关系,动物是父类(或基类),狗是子类(或派生类)。

要注意的是,在Java中的继承是单继承,也就是说一个儿子只能有一个爸爸

继承的好处:

  子类拥有父类的所有属性和方法(private除外)

  子类对父类代码的复用

继承的语法规则:

  class  子类  extends  父类    #如: class  Dog extends Animal{ ......  }

方法的重写:

1、什么是方法的重写:

  如果子类对继承父类的方法不满意,是可以重从写父类继承的方法,当调用时会优先调用子类的方法。

2、语法规则:

  返回值类型、方法名、参数类型及个数 都要与从父类继承的方法相同,才叫方法的重写。

继承的初始化顺序:

  若创建一个子类对象,系统会先创建父类的属性进行初始化,再调用父类的构造方法,然后再创建子类的属性进行初始化,最后调用子类的构造方法。

多态

多态指对象的多种引用形态,继承是多态的前提

1、引用多态

  父类的引用可以指向本类对象  Animal object1=new Animal();

  父类的引用可以指向子类对象  Animal object2=new Dog();

  注意:子类的引用不可以指向父类对象Dog object3=new Animal();

2、方法多态

  创建本类对象时,调用的方法为本类的方法;

  创建子类对象时,调用的为方法为子类重写的方法或者继承的方法

  注意:本类对象不能调用子类的方法

引用类型转换:
Dog dog=new Dog();  
Animal animal=dog();  //向上类型转换:(不存在风险)
Dog dog2=(Dog)animal;  //向下类型转换:(存在风险,可能出现数据溢出)
if(animal instenceof Cat){  //用instanceof运算符,来解决引用对象的类型,避免类型转换的安全问题,返回布尔值,来判断animal能否转换为Cat类型
  Cat cat=(Cat)animal;
} 抽象类:
规定子类必须实现某些方法,但不关注实现细节
a.abstract定义抽象类
b.abstract定义抽象方法,只有声明,不需要实现,如:public abstract void demo();  //直接使用分号结尾即可,不能有{ }
c.包含抽象方法的类一定是抽象类(abstract)
d.抽象类中可以包含普通的方法,也可以没有抽象方法
e.抽象类不能直接创建对象,可以定义引用变量
f.抽象类的子类必须实现父类中的所有抽象方法 接口:intreface
接口可以理解为一种特殊的类,由全局常量和公共的抽象方法组成
接口定义了类所需要遵守的规范,接口中的方法类中都必须提供
接口可以有多个父接口
接口一般是需要被继承和实现的,所以通常用public修饰,不能用protect和private
语法:
  [修饰符] interface 接口名 [extends 父接口1,父接口2,父接口3....] {    //如果接口或者接口内的方法不手动添加 abstract ,系统也会默认为abstract
    零到多个常量定义...
    零到多个抽象方法的定义...
  } 通过类使用接口:implements
  [修饰符号] class 类名 extends 父类 implements 接口1,接口2...{
    ...
  } 实现接口的多种方法:
  1、IAnimal demo = new Cat();  demo.eat();
  2、Cat demo = new Cat();  demo.eat();
  3、(用匿名内部类的方式1)
    IAnimal demo = new IAnimal(){
       public void eat(){
       System.out.println("eat");
       }
    };
  4、(用匿名内部类的方式2)
    new IAnimal(){
      public void eat(){
       System.out.println("eat");
       }
    }.eat();

最新文章

  1. C# 数组的交集、差集、并集
  2. ASP.NET Core的配置(5):配置的同步[设计篇]
  3. C#事件的理解应用
  4. Java为何用xml做配置文件?
  5. 【python】类中的super().__init__()
  6. MVC系列之开始
  7. linux hadoop 集群安装步骤
  8. android android:textColor="@[package:]color/filename" ----Color/filename文字颜色selector状态列表
  9. fedora22 mysql安装
  10. js键盘键值大全
  11. git的一些基本命令
  12. NYOJ127 星际之门(一)(最小生成数的个数+高速幂)
  13. 全排列hash-康拓展开
  14. 【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析
  15. SQLite 的 EXISTS 与 NOT EXISTS
  16. python 高阶函数学习, map、reduce
  17. sql select 0 字段
  18. Ubuntu16.04安装PostgreSQL并使用pgadmin3管理数据库_图文详解
  19. .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
  20. SIM_AT_Command

热门文章

  1. lualatex+Beamer生成ppt
  2. RegExp类型
  3. [转]FileDescriptor详解
  4. Springboot 2.x下多数据源配置
  5. springboot配置大全
  6. linux 使用 ioctl 参数
  7. CF Round #580(div2)题解报告
  8. ZR8.2 DP
  9. vue+element-ui实现分页
  10. python文件的读写追加等操作