zoukankan      html  css  js  c++  java
  • Java学习笔记之封装与继承

    封装

    1,将属性定义为私有的(private)   不能通过  对象名.属性  来直接访问,但是可以通过方法来间接的访问,

    2,封装的意义:公有属性可以被随意修改,并且不能被程序察觉。封装后,别人通过方法来访问属性时,我们可以添加限制,访问可以被程序察觉。

    下面我们用封装定义一个手机类(这种类一般我们称为 javabean

     1 public class Phone {
     2     private String type;
     3     private int price;
     4     private String color;
     5      
     6     public String getType(){
     7         return type;
     8     }
     9     public void setType(String type){
    10         this.type=type;
    11     }
    12     public int getPrice() {
    13     return price;
    14     }
    15     public void setPrice(int price) {
    16     this.price = price;
    17     }
    18     public String getColor() {
    19     return color;
    20     }
    21     public void setColor(String color) {
    22     this.color = color;
    23     }
    24      
    25 }

    注意  

    1,类中属性和方法的定义顺序没有先后之分

    2,当参数与属性重名时,计算机会优先考虑参数(这本身是错误的,不要这样做)

    继承

    继承:子类继承父类的几乎所有内容(属性跟方法)  关键字 extends

    1,那么什么不能被继承呢? private(私有属性)和构造方法不能被继承

    2,所有类都是object的子类

    3,在java中只能单继承

    重写:当子类继承过来的方法不满意,重新覆盖这个方法。

    1,当重写了父类的方法,调用的是子类重写过的方法,不会调用父类的那个方法。

    1 public class Person {
    2      
    3      public void eat(){
    4          System.out.println("我是父类的方法吃...");
    5      }    
    6 }
    1 public class Student extends Person {
    2     //重写  方法名与父类相同 会覆盖父类的方法
    3     @Override
    4     public void eat() {
    5         System.out.println("我是子类中重写的父类方法吃...");
    6     }
    7 }
    1 public class Text {
    2     //我是测试类
    3     public static void main(String[] args) {
    4            Student s=new Student();
    5            s.eat();
    6     }
    7 }
    8 //控制台输出结果为:
    9 //我是子类中重写的父类方法吃...

    2,super  可以在子类中调用父类的方法

     1 public class Student extends Person {
     2      //重写  方法名与父类相同 会覆盖父类的方法
     3     @Override
     4      public void eat() {
     5          //调用父类中的eat()
     6          super.eat()
     7          System.out.println("我是子类中重写的父类方法吃...");
     8      }
     9 }
    10 //若再进行测试,控制台输出结果为:
    11 //我是父类的方法吃...
    12 //我是子类中重写的父类方法吃...

    重载:方法名与父类相同,参数列表不同 ,是根据参数列表来匹配执行哪个方法

     1 public class Student extends Person {
     2      //重载  方法名与父类相同,参数列表不同
     3      public void eat(String s) {
     4          System.out.println("我是子类中重载的父类方法吃...");
     5      }
     6 }
     7 
     8 
     9 public class Text {
    10         //我是测试类
    11     public static void main(String[] args) {
    12            Student s=new Student();
    13            //参数对应就会调用相应的方法
    14            s.eat("sss");
    15         }
    16 }
    17 //结果为:我是子类中重载的父类方法吃...

    要点:当创建子类对象的时候,会先初始化父类的对象。如果没有显示调用父类的构造方法,默认调用父类的无参的构造方法。

    构造方法重载

     1 public Student(String sex){
     2         System.out.println("------>sex");
     3         //如果没有显示调用父类的构造方法,默认调用父类的无参的构造方法。
     4         this.sex = sex ;
     5 }
     6     
     7 public Student(String sex,int age){
     8         this(sex); // this() 表示的是本类其他的构造方法,根据参数寻找是哪个构造方法。当表示其他构造方法的时候必须必须放在第一行。
     9         this.age = age ;
    10         System.out.println("------>sex age ");
    11 }
    12     
    13     
    14 public Student(){
    15         super("sssss");// 显示调用父类的构造方法,不需要方法名。当super父类构造方法的时候,必须放在第一行。
    16         System.out.println("-----Student的构造方法------");
    17 }
  • 相关阅读:
    ABP框架系列之三十六:(MVC-Views-MVC视图)
    ABP框架系列之三十五:(MVC-Controllers-MVC控制器)
    ABP框架系列之三十四:(Multi-Tenancy-多租户)
    ABP框架系列之三十三:(Module-System-模块系统)
    2-kong的preserve_host和strip_uri解析
    2-Consul简介
    1-Consul系列文章
    1-Kong文章记录
    1-ES学些教程
    0-Jenkins系列学习文章
  • 原文地址:https://www.cnblogs.com/sunzhiqiang/p/11679563.html
Copyright © 2011-2022 走看看