面向对象(代码块、继承)

来源:互联网 发布:sql server 2008r2 编辑:程序博客网 时间:2024/05/21 07:10
一、代码块
    有三种:
        1、局部代码块
            方法体里,for循环里的大括号就是一个局部代码块
  1. public static void main (String[] args){
  2.                 {
  3.                     int num = 100;//作用域在大括号里边,使用后立即释放
  4.                 }
  5.             }
复制代码

2、构造代码块
            类里方法外,每次new一个对象,就执行一次
  1.   class ClassA{
  2.                 {
  3.                     System.out.println("构造代码块");
  4.                 }
  5.                 public ClassA(){
  6.                 
  7.                 }
复制代码

3、静态代码块
            在类加载的时候加载到方法区里的静态区,只执行一次
  1. class ClassB{
  2.                 static{
  3.                     System.out.println("静态代码块");
  4.                 }
  5.             }
复制代码
       代码块可以使用非正式的模拟数据进行对代码的测试
  1. class BlockDemo{
  2.         static int[] scores = new int[3];
  3.         //使用静态代码块对数组进行初始化
  4.         static {
  5.                 score[0] = 20;
  6.                 score[1] = 30;
  7.                 score[2] = 40;
  8.         }
  9.         public static void main(String[] args){
  10.                 print(scores);
  11.                 int index = getIndex(scores);
  12.                 System.out.println("获得的角标是:"+i);
  13.         }
  14.         //定义一个数字遍历方法
  15.         public static void print(int[] arr){
  16.                 for(int i = 0; i<arr.length; i++){
  17.                         System.out.print(arr[i]);
  18.                 }
  19.                 System.out.println();
  20.         }
  21.         //定义一个数组角标查询方法
  22.         public static int getIndex(int[] arr){
  23.                 int index = -1;
  24.                 for(int i = 0; i<arr.length; i++){
  25.                         if(arr[i] == 30){
  26.                                 index = i;
  27.                         }
  28.                 }
  29.                 return index;
  30.         }
  31. }
复制代码

二、继承(重点,难点)
    多个类具有相同属性和行为,将这些相同的属性和行为封装到另外一个类中,可以使代码的工作量减少,同时
    也利于对代码的维护。
    继承的语法
        class 子类名 extends 父类名 
        父类可以叫做基类,也可以叫做超类
        子类可以叫做派生类
        子类在继承父类公有属性和方法的同时自己还可以扩充属于自己的属性和方法
        通过老师、学生和人来演示
  1. //老师类和学生类具有一些共同的属性和方法,这些属性和方法定义在了人类里
  2.     class Person {
  3.         // 人类具有的属性(老师和学生同时也具有的属性)
  4.         String name;
  5.         int age;

  6.         // 构造方法
  7.         public Person() {

  8.         }

  9.         public Person(String name, int age) {
  10.                 this.name = name;
  11.                 this.age = age;
  12.         }

  13.         // 成员方法
  14.         public void eat() {
  15.                 System.out.println("吃饭");
  16.         }

  17.         public void sleep() {
  18.                 System.out.println("睡觉");
  19.         }

  20.         // set,get方法
  21.         public void setName(String name) {
  22.                 this.name = name;
  23.         }

  24.         public String getName() {
  25.                 return this.name;
  26.         }

  27.         public void setAge(int age) {
  28.                 this.age = age;
  29.         }

  30.         public int getAge() {
  31.                 return this.age;
  32.         }
  33.         
  34.         }
  35.         //定义一个学生类,学生类继承person类
  36.     class Student extends Person {
  37.         private String number;//学生特有的属性
  38.         public Student(){
  39.                 
  40.         }

  41.         public Student(String name, int age, String number) {
  42.                 super(name,age);
  43.                 this.number=number;        
  44.         }

  45.         public void study() {//学生特有的学习方法
  46.                 System.out.println("学习");
  47.         }
  48.         public void setNumber(String number){
  49.                 this.number = number;
  50.         }
  51.         public String getNumber(){
  52.                 return number;
  53.         }
  54.     }
  55.         //定义一个老师类
  56.     class Teacher{
  57.         private double salary;//老师特有的属性
  58.         public Teacher(){
  59.         
  60.         }
  61.         public Teacher(String name, int age, double salary){
  62.                 super(name,age);
  63.                 this.salary = salary;
  64.         }
  65.         public void teach(){//老师特有的授课类
  66.                 System.out.println("老师上课");
  67.         }
  68.         public void setSalary(String salary){
  69.                 this.salary = salary;
  70.         }
  71.         public String getSalary(){
  72.                 return salary;
  73.         }
  74.     }

  75.     
  76.     /*运行类*/
  77.     class ExtendsDemo{
  78.         public static void main(String[] args){
  79.                 
  80.         }
  81.     }
复制代码

    继承有优点也有缺点
        优点:节省代码量,便于维护和代码的复用
        缺点:耦合性强

    如果父类和子类中的成员变量名相同了,就要使用this和super来调用成员变量
  1. class A {
  2.         int num = 30;
  3.     }
  4.                         
  5.     class B extends A {
  6.         int num = 20;
  7.                                 
  8.         public void method() {
  9.                 int num = 10;
  10.                 System.out.println(num);// 10
  11.                 System.out.println(this.num); // 20
  12.                 System.out.println(super.num); // 30
  13.         }
  14.    }
复制代码

    继承可以多层继承,但是不能多重继承,即:可以 class A extends B extends C{} 但是不能 class A extends B,C{}
   子类只能继承父类的非私有成员,子类不能继承父类的构造方法,但是可以通过super关键字访问父类构造方法
   子类构造方法在初始化的时候,要先初始化父类的构造方法,然后再做子类的构造方法
   当几个类存执 a is b的结构时才可以使用继承机制,不能说两个类都有同一个名字的方法就要用继承机制
   比如猫和手机都有玩游戏的方法,但是它们之间没有a is b的关系,所以不能使用继承机制
   在一个子类中访问一个变量
       1.现在子类局部范围找
       2.在子类成员范围找
       3.在父类成员范围找,不能在父类局部范围里找
       4.如果没有就会报错
   继承中一个内容,方法的重写,和之间学过的方法重构还是有区别的
   如果子类和父类中有相同名字的一个方法,子类如果向要扩充或改写此方法,就需要用到方法的重写
   重载是针对于一个类中方法的
        方法名字定义成一个是方便程序员使用,但是根据参数的方式自行匹配                
   重写是针对于继承机制中的多个类的方法
   重写的目的,对父类的代码进行扩展,或者变化特别大完全覆盖        
0 0