---------------------- 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培训、期待与您交流! ----------------------