Java基础_基础语法知识7
面向对象
1.使用java提供的帮助文档
  使用java提供的jdk帮助文档。(演示)
  
  (1).如何使用帮助文档
      A:打开帮助文档
	  B: 点击显示,找到索引,找到输入框。
	  C: 知道你要找哪一个?如Scanner()键盘输入,如Math()
	  D: 看是在哪一个包下面
	      如果说是在java.lang包下面的类不需要导入(如:math()),别的包都需要导入。
          如:Scanner-->import java.util.Scanner;		  
	  E: 再简单的看类的解释和说明,注意看这一个类的版本。
	  F: 在看类的组成
	     成员变量   字段摘要
		 构造方法   构造方法摘要
		 成员方法   方法摘要,注意看参数传入
	  G: 学习构造方法
	     有构造方法     就创建对象,调用方法
		 没有构造方法   成员都有可能是静态的
	  H: 看成员方法
	  
	     左边:
		 是否是静态的:如果是静态的,那么就可以使用类名直接调用该方法
		 查看返回值类型:需要使用什么来接受,那么就用什么来接受
	     
		 右边:
		 看方法名:方法不要写错
		 参数列表:需要传入什么就给什么传入。
		 
  
2.代码块
   (1).什么是代码块
       在java语言中,使用{}括起来的代码被称为代码块,按照其声明和位置的不同,可以分为局部代码,构造代码块,静态代码块
	   同步代码块。
	   
   (2).局部代码块以及其特点
       A:在方法中出现
	   B:一般用于限定变量的生命周期,以及提前释放资源,提高代码使用率。
	   
   (3).构造代码块 
       A:出现位置是类中方法外。
       B:在构造方法之前执行
    
   (4).静态代码块 
       A:静态代码块加了修饰符static
       B:一般用于给这一个类初始化
       C:类在加载的时候就会执行这一个静态代码块,但是仅仅执行一次,一般用于一些初始化一些参数。	   
	   
   (5).代码块相关案例:
    public class Test {
	static{
		System.out.println("Test的静态代码块");
	}
	
	{
		System.out.println("Test的构造代码块");		
	}
	
	public Test(){
		System.out.println("Test的构造方法");
	}
	
	//测试
	public static void main(String[] args) {
		System.out.println("这是测试方法");
		Test ts = new Test();
	}
    //输出结果:
	Test的静态代码块
    这是测试方法
    Test的构造代码块
    Test的构造方法
3.继承
  (1).继承概述
      多个类中存在相同的属性和行为的时候,将这一些内容抽取到单独的一个类中,这样别的那几个类就不必要在定义了,只需要
	  继承这一个类就可以了。
  (2).继承的定义结构
      class 子类名 extends 父类名{}
	  
	  //单独写的这一个类被称为父类,继承它的这一个类被称为子类。简单的说就是谁继承,谁就是子类。
  (3).继承的好处
      A:提高了代码的复用性。
	  B:提高了代码的维护性。
	  C:让多个类之间有联系,这是多态的前提。
  (4).继承的坏处
      A:由于继承中让多个类之间有了联系。这样也就增加了类之间的耦合性。
	  我们开发需要的是:低耦合,高内聚(类之间联系少一点,一个类能够完成的特定功能多一点)
  (5).类的继承的特点
   A:java中只支持单继承,不支持多继承,也就是一个类只可以有一个父类。
   如:public student extends person(){}
   
   B:java中支持多层继承,可以弥补多继承的缺点
   如:class A(){}
       class B extends A(){}
	   class c extends B(){}
   这一个时候C既有A的特性,又有B的特性,类似于多继承。
   
   
   (6).继承中的注意事项
       A:子类只能够继承父类中的非私有方法成员(成员方法和成员变量)。
	   B:子类不继承父类的构造方法,但是可以通过关键字super去访问父类的构造方法。
       C:不要以为部分功能而是用继承
	   D:继承的是指体现的是"is a"的关系,也就是说必须是这一个类型中的一员,尽量要具备所有的特征。
	     如:学生张三 is a Student,那么这一个时候张三是具备所有的学生类的特点的。
	   
   (7).继承中成员变量的关系
       子类中的成员变量和父类中名称不一样,这一个时候就是各找个的。
	   子类中的成员变量和父类中名称一样。
	   这一个时候这个成员变量的查找顺序是:
	   A:子类方法的局部范围找,有就使用;
	   B:子类的成员范围内找,有就使用;
	   C:父类的成员范围内找,有就使用;
	   D:如果还是没有,那就不找了,报错。
	   
   (8).关键字this和super的区别和应用
   
      A:this和super关键字的区别和使用
	    this:表示的是当前类对象的引用
		super:代表的是父类存储空间的表示(也可以认为是父类对象的引用)
    
	  B:super和this关键字的基本使用
	    访问成员变量:
         this.成员变量    super.成员变量  	
        访问构造方法
         this(...)           super(...)	
    
        访问成员方法
         this.成员方法    super.成员方法		
      C:super和this关键字的基本代码使用:
	   //父类
	   public class Father {	
	       public int num = 10;
       }
       //子类以及测试
	   public class Son extends Father{
	       public int num = 20;
	
	   public void Test(){
		   int num = 30;
		   System.out.println("num is:"+num);
		   System.out.println("成员范围内的num:"+this.num);
		   System.out.println("父类的num:"+super.num);
	   }
	
	   public static void main(String[] args) {
		Son s = new Son();
		s.Test();
	   }
	   }
	   //输出结果:
	   num is:30
       成员范围内的num:20
       父类的num:10
    (9).继承中的构造方法
	    A:继承中的构造方法 
		  子类中的所有构造方法都会默认访问父类中的空仓构造。
		   为什么?
		   因为子类会继承父类中的数据,可能还会使用父类中是数据,所以,初始化之前,一定要先完成父类的初始化。
		   所以,子类构造的每一条语句都是super(),调用父类的空参构造,默认存在;
        B:代码体现:
		//父类
		public class Father {
	       public Father(){
		       System.out.println("这是father的无参构造");
	       }
        }
        //子类 
		public class Son extends Father{
	        public Son(){
		        System.out.println("son的构造方法");
	        }
			
	        public static void main(String[] args) {
		        Son s = new Son();
	        }
        }
		//输出结果:
		 这是father的无参构造
         son的构造方法
		 
        C:继承中构造方法的使用注意事项
	      如果说父类中没有构造方法,那么这一个时候子类的构造方法会出现什么情况?
		  出错!!
		  如何解决?
		  a:在父类中添加一个相应的构造方法
		  b:使用super关键字去调用父类的带参构造
		  c:子类通过this关键字去调用本类的其他构造方法
		     子类中一定要有一个区访问了父类的构造方法,否则,无法初始化父类的数据。
			 this()和super一定要放置在第一行。否则会初始化多次。
		
		
        D:代码体现
		public class Father {
	      public Father(String str){
		     System.out.println("这是father的无参构造");
	        }
        }
		
		public class Son extends Father{
	
	       public Son(){
		    //不用super会报错
		    super("");
		    System.out.println("son的构造方法");
	    }
	
	    public Son(String str){
		   //不用super和this()会报错
		   //this()的实质就是调用了无参的构造,同时会调用father的构造
		   this();
		    //super("");
		   System.out.println("带参构造");
	    }
	    public static void main(String[] args) {
		   Son s = new Son();
	    }
        }
		
		
   (10).继承中成员方法的关系
        如果说父类方法和子类方法名称不一样,那么就是各找个的。
		如果说父类方法和子类方法名称一样。
		    如果说使用子类对象去访问一个方法,首先在子类方法中去查找,有就使用
		    然后再去父类中去找,有就使用,
			如果都没有,那么就报错
   (11).方法重写在继承中的应用
         什么是方法重写?
		 方法重写就是子类中出现了和父类方法名称一样的方法声明,也被称为方法覆盖。
		 
		 使用特点:
		 如果说方法名称不同,那么就是各用各的。
		 如果说方法名称相同,那么最终使用的还是子类自己写的方法。
		 
		 什么时候使用方法重写?
		 当子类需要使用父类的功能,而子类自己又需要添加一些逻辑关系的时候,我们就可以考虑使用方法重写。
		 这样父类中的方法特点,我们通过集成就可以获得,同时又可以添加子类自己的逻辑在里面。
		 
		 
		代码实现:
		public class Father {
	
	       public void sign(String str){
		     System.out.println(str+"有个小油肚");
	        }
        }
		 
		public class Son extends Father{
	
	        public void sign(String str){
		       super.sign(str);
		       System.out.println(str+"爱吃肉");
	        }	
	
	    public static void main(String[] args) {
		Son s = new Son();
		s.sign("小明");
	    }
        }
		//输出结果:
		小明有个小油肚
        小明爱吃肉
		 
		 
		方法重写使用注意事项:
		父类中的私有方法不可以被重写,这是父类中自己特有的方法,是不会遗传给儿子的。
		子类中重写父类方法的时候,访问权限不能够被父类的低(父亲很抠,儿子不可以更抠)。
		父类中的静态方法,子类中也必须通过静态方法来重写(特殊)
		 
		 
   (12)方法重写和方法重载	 
	   方法重写:
           英文标识:Override
		   表示含义:在子类中,出现和父类中一模一样的方法声明的现象。(俩个类)
       方法重载:
           英文标识:Overload	   
		   表示含义:在同一个类中,出现方法名相同,而参数列表不一样的方法声明的现象。(同一个类)
		 
		 
		 
                    
                
                
            
        
浙公网安备 33010602011771号