黑马程序员_08_继承_接口

 
---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
 


0701-0701-0701-0701-0701-0701-0701-0701-0701-0701-0701-0701-0701-0701-0701-0701-
继承:
1、提高了代码的复用性。
2、让类与类之间产生了关系。有了这个关系,才有了多态。

/*
继承:
1、提高了代码的复用性。
2、让类与类之间产生了关系。有了这个关系,才有了多态。
注意:
千万不要为了获取其他类的功能、简化代码而写继承,
必须是类与类之间有所属关系才可以继承,所属关系是is a....
*/
public class Extends0701{
		public static void main(String[] args){
					
		}	
}
class Person{
		private String name;
		private int age;
		
		public void setName(String name){
				this.name=name;
		}	
		public String getName(){
				return name;
		}
		
		public void setAge(String age){
				this.age=age;
		}	
		public String getAge(){
				return age;
		}
		
		public void speak(){
				System.out.println("我是一个人");	
		}
}
/*
1、Java只支持单继承,不支持多继承。
2、因为当多个父类中定义了相同方法(方法名称相同,参数列表相同,返回值类型相同)时,
子类不能确定运行哪一个方法。
3、但是Java保留了这种机制,并用另一种体现形式来完成表示,即多实现。
*/
class Student extends Person{
		private int uuid;
		
		public void setUuid(int uuid){
				this.uuid=uuid;
		}	
		publid int getUuid(){
				return uuid	
		}
		
		public void study(){
				System.out.println("I'm studying.Don't disturb me!");	
		}
}

class Worker extends Person{
		private String company;
		
		public void setCompany(String company){
				this.company=company;
		}	
		publid String getCompany(){
				return company	
		}	
		
		public void work(){
				System.out.println("I'm workying.Don't disturb me!");	
		}
}

0704-0704-0704-0704-0704-0704-0704-0704-


public class Extends0701{
		public static void main(String[] args){
			  //加载子类之前应该先加载父类
				Student s=new Student();	
						
		}	
}
class Person{
		public String hobby;
		private String name;
		private int age;
		
		public void setName(String name){
				this.name=name;
		}	
		public String getName(){
				return name;
		}
		
		public void setAge(String age){
				this.age=age;
		}	
		public String getAge(){
				return age;
		}
		
		public void speak(){
				System.out.println("我是一个人");	
		}
}

class Student extends Person{
	  public String hobby;
		private int uuid;
		
		public void setUuid(int uuid){
				this.uuid=uuid;
		}	
		publid int getUuid(){
				return uuid	
		}
		
		public void study(){
				System.out.println("I'm studying.Don't disturb me!");	
		}
		
		public void printHobby(){
			  /*
			  如果父子类中出现了非私有的同名变量,子类要访问本类中的变量用this,子类要访问父类的同名变量要用super。
			  super的使用和this的使用几乎一致:this代表的是本类对象的引用,super代表的是父类对象的引用。
			  */
				System.out.println("student的爱好是:"+this.hobby);	
				System.out.println("person的爱好是:"+super.hobby);	
		}
}

class Worker extends Person{
		private String company;
		
		public void setCompany(String company){
				this.company=company;
		}	
		publid String getCompany(){
				return company	
		}	
		
		public void work(){
				System.out.println("I'm workying.Don't disturb me!");	
		}
}

0705-0705-0705-0705-0705-0705-0705-0705-

public class Extends0705{
		public static void main(String[] args){
				Student s=new Student();
				//1、当子类中有和父类相同的方法时,子类对象调用该方法运行的是子类的方法的内容,
				//如同父类的方法被覆盖了一样。这种情况是函数的另一个特性:覆盖(重写)。
				//2、覆盖Override:是指当子类对从父类继承的方法不满意时,子类可以对其进行内容修改,
				//但是原方法的方法名、返回值类型、参数列表不能改变。
				s.speak();
		}	
}
class Person{
		public void speak(){
				System.out.println("I'm a person !");	
		}	
}
/*
1、子类覆盖父类,必须保证子类的权限大于等于父类的权限,这样才可以覆盖。
2、静态只能覆盖静态
*/
class Student extends Person{
	
		public void speak(){
			  System.out.println("I'm a student..... !");	
		}	
}

0706-0706-0706-0706-0706-0706-0706-0706-

public class Extends0706{
		public static void main(String[] args){
				Student s=new Student();
				/*
				二、为什么子类的构造一定要调用父类的构造方法?
				    子类可以直接使用从父类继承的数据,但是在使用之前应该先访问父类的构造方法。
				因为父类的构造方法有可能对数据进行初始化或者修改。如果不访问父类的构造方法,
				子类得到的数据有可能是错误的。
				*/
				System.out.println("num="+num);
		}	
}
class Person{
	  int num=3;
		Person(){
			  num=33;
				System.out.println("person run !");	
		}	
		Person(int n){
				System.out.println("person run !::::"+n);	
		}
}
class Student extends Person{
	
		Student(){
			   /*
			  //1、对子类对象进行初始化时,父类的构造函数也会运行,
			  //那是因为子类的构造函数的第一行默认有一条隐式的语句:super()
			    
			  //2、super()会调用父类中的无参的构造函数
			  //3、子类中所有的构造函数的默认第一行都是super()
			    4、super()是默认的被调用的构造函数,如果想调用其他的构造函数,可以通过参数的不同,
			       手动的选择:比如,想调用另外的构造函数时,可以这样写:super(8888);
			    5、super()语句一定定义在子类构造函数的第一行。
			    6、子类构造函数的第一行要么是super()语句,要么是this()语句,两者只能二选一
			  */
			  System.out.println("student run...... !");	
			  
		}	
}

0707-0707-0707-0707-0707-0707-0707-0707-

final可以修饰类、变量、方法
1、被final修饰的类,不可以被继承,有些人称这样的类是“断子绝孙类”。
2、被final修饰的方法不可以被重写。
3、被final修饰的变量只能赋值一次,既可以修饰成员变量,又可以修饰局部变量。
  (1)、当描述事物时,一些数据的出现值是固定的,那么这时为了增强阅读性,都给这些值起个名字,方便阅读。
   而这个值不需要改变,可以给这个值加上final来修饰。
	(2)、作为常量,常量的书写规范是所有的字母都要大写,如果由多个单词组成,那么单词之间用下划线(“_”)链接
4、内部类定义在类的局部位置上的时候,只能访问局部位置上被final修饰的局部变量。

0708-0708-0708-0708-0708-0708-0708-0708-

1、抽象方法一定在抽象类中。
2、抽象方法和抽象类必须得被abstract修饰。
3、抽象类不可以被new创建对象,因为调用抽象方法没有意义。
4、抽象类中的抽象方法要被使用,必须由子类复写所有的抽象方法后,建立子类对象调用。
   如果子类值覆盖了部分抽象方法,那么该子类还是抽象类。

0711-0711-0711-0711-0711-0711-0711-0711-

/*
写一个类,这个类可以获取执行一段代码所耗费的时间
原理:获取程序的开始时间和结束时间并相减即可。
*/
class GetTime{
		public void getTime(){
				long start=System.currentTimeMillis();
				
				int sum=0;
				for(int i=0;i<100000000;i++){
						sum+=i;
				}
				
				long end=System.currentTimeMillis();
				
				System.out.println("执行本段代码耗时 "+(end-start)+"毫秒");	
		}	
}

public class Template0711_01{
		public static void main(String[] args){
				GetTime gt=new GetTime();
				gt.getTime();	
		}	
}
*********************************************************************
/*
写一个类,这个类可以获取执行一段代码所耗费的时间
原理:获取程序的开始时间和结束时间并相减即可。
*/
class GetTime{
		public void getTime(){
				long start=System.currentTimeMillis();
				
				runcode();
				
				long end=System.currentTimeMillis();
				
				System.out.println("执行本段代码耗时 "+(end-start)+"毫秒");	
		}	
		public void runcode(){
				int sum=0;
				for(int i=0;i<100000000;i++){
						sum+=i;
				}	
		}
}

public class Template0711_02{
		public static void main(String[] args){
				GetTime gt=new GetTime();
				gt.getTime();	
		}	
}
*********************************************************************
/*
1、写一个类,这个类可以获取执行一段代码所耗费的时间
原理:获取程序的开始时间和结束时间并相减即可。
2、什么是模板方法?
在定义功能时,功能的一部分是确定的,但是有一部分是不确定的,而确定部分在使用不确定部分。
那么这时就要把不确定部分暴露出去,由该类的子类去完成。
*/
abstract class GetTime{
		public void getTime(){
				long start=System.currentTimeMillis();
				
				runcode();
				
				long end=System.currentTimeMillis();
				System.out.println("执行本段代码耗时 "+(end-start)+"毫秒");	
		}	
		//不确定的部分不一定是abstract的
		public abstract void runcode();
}
class SubGetTime extends GetTime{
		public void runcode(){
				int sum=0;
				for(int i=0;i<100000000;i++){
						sum+=i;
				}	
		}
}
public class Template0711_03{
		public static void main(String[] args){
				//GetTime gt=new GetTime();
				SubGetTime sgt=new SubGetTime();
				sgt.getTime();	
		}	
}

0712-0712-0712-0712-0712-0712-0712-0712-0712-0712-0712-0712

一、接口
	1、格式:
			interface();
	2、接口中的成员修饰符是固定的
		(1)、成员常量:public static final
		(2)、成员方法:public abstract(这些修饰符可以不写,但是最好写上,这样方便阅读)
	3、接口的出现将“多继承”通过另一种形式体现出来,即“多实现”。
	4、初期可以这样理解:
			接口就是一个特殊的抽象类,该抽象类中的方法都是抽象方法。
	5、接口是不可以创建对象的,因为接口中有抽象方法,需要被子类实现。
	   当子类实现了所有的接口后,子类可以实例化。否则,子类是一个抽象类。
interface Inter{
		public static final int NUM=3;
		public abstract void show();	
}

class Test implements Inter{
		public void show(){
				System.out.println("Test....");	
		}	
}

public class Inter0712{
		public static void main(String[] args){
				Test t=new Test();
				System.out.println(t.NUM);	
				System.out.println(Test.NUM);	
				System.out.println(Inter.NUM);	
		}	
}

0713-0713-0713-0713-0713-0713-0713-0713-0713-0713-0713-
/*
一个类只可以继承一个类,但是可以实现多个接口.
*/
interface Inter{
		public static final int NUM=3;
		public abstract void show();	
}
interface InterA{
		public abstract void show();	
}
class Demo{
    public int add(int a,int b){
    		return a+b;
    }	
}
class Test extends Demo implements Inter,InterA{
		public void show(){
				System.out.println("Test....");	
		}	
}
public class Inter0712{
		public static void main(String[] args){
				Test t=new Test();
				System.out.println(t.NUM);	
				System.out.println(Test.NUM);	
				System.out.println(Inter.NUM);	
		}	
}
******************************************************************
/*
接口与接口之间存在多继承
*/
interface InterA{
		public abstract void showA();	
}
interface InterB{
		public abstract void showB();	
}
interface InterC extends InterA,InterB{
		public abstract void showC();	
}

public class Inter0713_02 implements InterC{
	  public static void main(String[] args){
				
	  }
	  public void showA(){
				
		}	
		public void showB(){
			
		}	
		public void showC(){
			
		}	
}

0714-0714-0714-0714-0714-0714-0714-0714-0714-0714-0714-0714-0714-0714-0714-
接口的特点:
1、接口是对外暴露的规则。
2、接口是程序的扩展功能。
3、接口可以用来多实现。
4、类与接口是实现关系,类在继承一个类的同时可以实现多个接口。
5、接口与接口之间可以有继承关系。






---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值