body, table{font-family: 微软雅黑; font-size: 10pt}
table{border-collapse: collapse; border: solid gray; border-width: 2px 0 2px 0;}
th{border: 1px solid gray; padding: 4px; background-color: #DDD;}
td{border: 1px solid gray; padding: 4px;}
tr:nth-child(2n){background-color: #f8f8f8;}

继承:  (不会产生覆盖)子类继承父类的方法,当子类去调用该方法时,如果该方法内用到了一个 成员变量 在父类和子类都有该成员变量,那么他会用父类的。即 子类调用父类方法,里面所有变量都是用父类中的,自己定义没用
继承中构造函数初始化:
显式初始化:可以在子类构造函数的第一条语句通过 super() super(…) 调用父类的默认构造函数或特定签名的构造函数,系统默认也会提供;
当父类没有提供默认构造函数时,必须在子类构造函数第一条语句通过  super(…)   完成父类对象成员的初始化工作;
class A{
    int a,b;
    A(int c, int d){
        a=c;
        b=d;
    }
}
class B extends A{
    int c;
    B(int i, int j, int k){
     super(i, j);
     c=k;

}
Hiding Fields (隐藏域):

域不能被覆盖,只能被隐藏,子类可以通过声明与父类或祖先类中的域同名的域来实现对父类或祖先类中的域的隐藏
要访问父类或祖先类中被隐藏的域必须通过super引用,即 super.hiddenField
当通过对象引用访问对象的域的时,域的值由对象引用所属的类型决定,并不由被引用的对象的实际类型决定

super 引用:
保留字 super 可以在任意的非静态方法中使用,super可以看作当前对象实例所对应的父类型的实例引用,通过super引用可以访问属于父类实例的域和方法,通常这些域和方法被当前类隐藏或被覆盖了
final 的用途:
被final修饰的类不能被继承,被final修饰的方法不能被覆盖
使用final修饰类和方法可以提高安全性
使用final修饰类和方法可以加快某些类型检查过程

Packaging Classes:
在Java源程序文件的第一行使用 package 声明可以使文件中定义的类成为指定包的成员
package声明的语法如下:
        package <包名>;
包名通常由多个名字字符串构成,中间用句点“.”分隔,每个名字表示的包称为其前面的名字表示的包的子包,通常以组织机构的域名反转形式作为其所有包的通用前缀,如
       com.somecompany.apps
包有以下用途:
     (1) 将相关的类和接口分组,包名通常表示包中各个类和接口的用途
     (2) 包创建了不同的命名空间(Namespace),从而有效地解决了类型命名冲突问题
     (3) 包提供了对应用程序内部实现机制的保护域
***当一个类中引入了一个包,程序要new一个对象,这个对象在类所在包和引入的包中都含有,默认new的是引入包的对象;如果要new出类所在包的其他类的对象,就要加类限定符:com.new对象类包名 类名 = new com.new对象类包名 () ; 

Type Imports:
在类名前面加上类所属的包名,中间用句点“.”分隔,称为类的完全限定名(Full Qualified Name),简称类的限定名
当在类体中使用了与当前类不同包的类名时,编译器编译时因为无法找到该类的定义而失败,有两个解决办法:
     (1) 使用不同包类的完全限定名
     (2) 使用import声明,为编译器提供该类的定义信息

多态:
//父子关系 //方法覆盖  //父类引用指向子类对象
多态中,父类的引用指向子类的实例,如果调用该方法有覆盖,则优先调用子类的;其他的都没有特例,一律调用父类自己的。
方法覆盖是指在子类中替换父类或祖先类对某个方法的实现。

方法覆盖通过子类重新定义与父类或祖先类中具有同样签名和返回类型的方法实现。

被final修饰的方法不允许在子类中覆盖。
其它修饰符,如synchronized、native可以在覆盖的方法声明中自由使用
父类被覆盖的方法的参数列表中被声明为 final 的参数在子类的覆盖方法的中可以不必指定为final(可以更改)
子类覆盖方法声明的异常列表中的异常类必须与父类被覆盖方法声明的异常列表中的异常类兼容(相同或是其子类)
只有在子类类体中可以访问的父类或祖先类的方法才能被覆盖
多态的优点:提高代码的可维护行、提高代码的扩展性
多态的弊端:不能使用子类的特有功能   
如何解决
法1:创建子类对象调用子类方法
法2:把父类的引用强转为子类引用   (向上转型:Animal animal = new Dog();   向下转型:Dog dog = (Dog) animal;)

package com.java.多态;
public class Demo2 {
                    public static void main(String[] args){
                            Cat2 cat2=new Cat2();
                            //cat2.eat();
                            //cat2.sleep();
                            keepCat(cat2);
                            Dog dog=new Dog();
                            dog.eat();
                            dog.sleep();
                            Pig pig=new Pig();
                            pig.eat();
                            pig.sleep();
                            keepAnimal(cat2);
                            keepAnimal(dog);
                            keepAnimal(pig);
                }
       public static void keepAnimal(Animal2 animal2){  
                            animal2.eat();
                            animal2.sleep();
                    }
      public static void keepCat(Cat2 cat2){
                            cat2.eat();
                            cat2.sleep();
                    }
     public static void keepDog(Dog cat2){
                            cat2.eat();
                            cat2.sleep();
                    }
    public static void keepPig(Pig cat2){
                            cat2.eat();
                            cat2.sleep();
                    }
}
class Animal2{
        public String Weight;
        public void eat(){
                System.out.println("Animal2 eat()");
        }
        public void sleep(){
                System.out.println("Animal2.sleep()");
        }
}
class Cat2 extends Animal2{
        public String Weight;
        public void eat(){
                System.out.println("Cat2 eat() fish");
        }
        public void sleep(){
                System.out.println("Cat2.sleep() in day");
        }
}
class Pig extends Animal2{
        public String weight;
        public void eat(){
                System.out.println("Pig eat() rice");
        }
        public void sleep(){
                System.out.println("Pig sleep() in all day");
        }
}
class Dog extends Animal2{
        public String weight;
        public void eat(){
                System.out.println("Dog eat() meet");
        }
        public void sleep(){
                System.out.println("Pig sleep() in night");
        }
}

多态中成员访问的特点
成员变量
   编译看左边,运行看左边
函数
   编译看左边,运行看右边

A.java
public class A {
        protected void f() {
                System.out.println("A.f()");
                this.g();
        }
        protected void g() {
                System.out.println("A.g()");
        }
}

B.java

public class B extends A {
        @Override   //ALT+/
        protected void g() {
                System.out.println("B.g()");
        }
}
//运行结果
Test.java

public class Test {
        public static void main(String[] args) {
                        B b=new B();
                        A  a=new B();
                        a.f();
                        b.f();
                        B b1=(B)a;
                        b1.f();
        }

Java——三大特性的更多相关文章

  1. Java 三大特性——封装、继承、多态

    一.封装 封装,实际就是把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用. 概念:在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节 ...

  2. JAVA三大特性之多态

    面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据 ...

  3. JAVA三大特性之一——封装

    自学java已经有一段时间了,但是感觉对于很多知识点还是有必要总结和整理一下,下面我就来说一下我对JAVA三大特性之一——封装特性的认识和理解. 封装,从字面意思可以看出来,就是包装,也就是把我们写好 ...

  4. JAVA基础第二章-java三大特性:封装、继承、多态

    业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 我将会持续更新java基础知识,欢迎关注. 往期章节: JAVA基础第一 ...

  5. Java三大特性

    Java 三大特性,算是Java独特的表现,提到Java 的三大特性, 我们都会想到封装, 继承和多态 这是我们Java 最重要的特性. 封装(Encapsulation) : 封装:是指隐藏对象的属 ...

  6. java三大特性:封装、继承、多态

    Java三大特性之封装   一.定义 封装性指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部的信息,而是通过该类所提供的方法来实现对内部信息的操作和访问. 二.使用封装的好处: 1 ...

  7. 浅谈Java三大特性

    Java三大特性想必大家都不陌生:封装.继承以及多态.很多刚接触Java的小伙伴都会想,它们到底有什么了不得之处,又赋予Java这门编程语言什么魔力呢?今天我们来探讨一下吧~~ 首先,名词解释: 封装 ...

  8. 浅析Java三大特性封装、继承、多态,及作业分析

    前言 本次博客衔接上次博客,作为这一阶段Java学习的分析.上一篇博客着重介绍了Java的OO编程思维,面向对象与面向过程的区别.本篇博客重心在Java的三大技术特性,附带作业分析. Java三大特性 ...

  9. JAVA三大特性之三——多态

    作为JAVA的三大特性之一,多态性是很多人都没有弄清楚的一个重要特性,今天我就来从我所理解的角度来说一下. 首先,从他的字面意思来理解,多态,从其字面来理解就是多种形态,多种表现形式.根据这些,我最能 ...

  10. Java 三大特性

    一.Java第一大特性:封装   封装:将属性私有化,提供共有方法访问私有属性,实现细节隐藏,并且程序也更加容易维护. class Dish { private final String name; ...

随机推荐

  1. redhat 7.2 内网安装docker

    本文介绍在内网环境下如果通过网络代理映射来完成docekr的安装,首先在能上网的windows机器上安装squid,并启动,本实例中windows机器IP为 192.168.192.101 ,squi ...

  2. 【剑指Offer】俯视50题之1-10题

    面试题1赋值运算符函数  面试题2 实现Singleton模式  面试题3 二维数组中的查找   面试题4 替换空格   面试题5 从头到尾打印链表   面试题6 重建二叉树   面试题7 用两个栈实 ...

  3. centos 系统软件包管理 yum 本地yum配置 扩展源epel rpm 清除yum缓存 yum provides "*/vim" 第十节课

    centos  系统软件包管理  yum 本地yum配置  扩展源epel  rpm  清除yum缓存  yum provides "*/vim"   第十节课 你不能保证可逆化操 ...

  4. 使用Atom预览markdown

    1.打开任意.md文件(markdown源文件)2.windows : ctrl + shift + pmac : command + shift + p这条命令跟Sublime Text是一样的,打 ...

  5. WMS学习笔记:1.尝试加载WMS

    1.首先找一个可用的WMS栅格地图服务:http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities: http://de ...

  6. NodeJS学习笔记三

    map map对象是一个简单的键/值映射.任何值(包括对象和原始值)都可以用作一个键或一个值. var m = new Map(); var o = {p: "Hello World&quo ...

  7. 《高性能CUDA应用设计与开发》--笔记

    第一章 1.2 CUDA支持C与C++两种编程语言,该书中的实例采取的是Thrust数据并行API,.cu作为CUDA源代码文件,其中编译器为ncvv.   1.3 CUDA提供多种API: 数据并行 ...

  8. centos6.5搭建svn

    检查已经安装版本  rpm -qa subversion如果存在旧版本,卸载yum remove subversion 安装svn yum install subversion 验证是否安装成功 sv ...

  9. IntelliJ IDEA 常用快捷键,maven依赖图,个性化设置,禁用Search Everywhere

    查看idea 中jar关系图 快捷键: Ctrl+/ 用于注释,取消注释 Ctrl+Shift+F 全文搜索 Ctrl+F 单页面查找 Ctrl+Alt+Shift+L  格式化代码 ======== ...

  10. POJ 1062 昂贵的聘礼(最短路)题解

    题意:中文题意不解释... 思路:交换物品使得费用最小,很明显的最短路,边的权值就是优惠的价格,可以直接用Dijkstra解决.但是题目中要求最短路路径中任意两个等级不能超过m,我们不能在连最短路的时 ...