Java学习笔记——继承

面向对象编程支持从已经存在的类中定义新的类,这称为继承。继承使得你可以定义一个通用的类(父类),之后继承该类为一个更特定的类(子类)。

假设需要设计类对三角形或者圆等几何图形建模,几何的对象有许多共同的属性和行为,比如所用的颜色,比如是否填充。
这时就需要用到类的继承,用一个GeometricObject来建模所有的几何对象,以及适用于这些属性的获取方法和设置方法,同时补充三角形(Triangle)所需的属性

GeometricObject类所需要的属性及其方法:
color:String   (对象的颜色)
filled:boolean  (对象是否填充颜色)
dateCreated:java.util.Date (对象创建的日期)
————————————————————————————————————————————————————————————————————
GeometricObject() (创建一个GeometricObject对象)
GeometricObject(color: String, fled: boolean) (创建特定属性的对象)
getColor: String (返回颜色)
setColor(color: String): void  (设置新颜色)
isFilled(): boolean (返回filled属性)
setFilld(filled: boolean): void  (设置filled属性)
getDateCreated(): java.util.Date   (返回dateCreated)
toString(): String  (返回对该对象描述)
Triangle类所需要的属性及其方法:
side1: double
side2: double
side3: double
————————————————————————————————————————————————————————————————————————
Triangle()
Triangle(side1: double, side2: double, side3: double, color: String, flled: booean)
getSide1(): double
getSide2(): double
getSide3(): double
getArea(): double
getPerimeter(): double
toString(): String

使用以下的语法来进行继承

public class Subclass extends Superclass

子类继承了父类, 也将获得父类的全部成员变量和方法

关于继承需要注意的:
1.子类并不是一个父类的子集,通常一个子类比父类包含更多的信息和方法
2.父类中的私有数据与在该类之外是不可访问,因此也不能在子类中直接使用,但如果父类中定义了公共的访问器,那么可以通过这些公共的访问器来访问它们。
3.Java中不允许多重继承,一个Java类只能继承一个父类,这种限制称为单一继承,多重继承可以通过接口实现。

关于super关键字:
关键字super指代父类,可以用于调用父类中的普通方法和构造方法。

//调用父类构造方法的语句是:
super();
super(arguments);

注意:语句super()或super(arguments)必须出现在子类构造方法的第一行,这是显式调用父类构造方法的唯一方式。
关键字super不仅可以引用父类的构造方法,也可以引用父类的方法。
所用语法如下:

super.方法名(参数);

比如

public Triangle(String color,boolean filled){
setColor(color);
setFilled(filled);
}

可替换成

public Triangle(String color,boolean filled){
super(color,filled);
}

方法重写:要重写一个方法,需要在子类中使用和父类一样的签名来对该方法进行定义。
子类从父类中继承方法,有时,子类需要修改父类中定义的方法的实现,这称为方法的重写。
关于方法的重写:
1.重写的方法必须与被重写的方法有一样的签名,一样的或者兼容的返回值类型,兼容的含义是重写方法的返回类型的子类型。
2.仅当实例方法可访问时,他才能被重写,因为私有方法在他所处的类本身以外是不能被访问的,所以它不能被重写,如果子类中的定义的方法在父类中是私有的,则这两个方法完全没有关系。
3.静态方法与实例方法一样,都可以被继承,但是静态方法不能被重写。
比如GeometricObject类中的tostring方法,这个方法可以在Triangle中重写,返回表示三角形的三边长

class GrometriObject{
public String toString(){
            return "该图形创造于 "+dateCreated+"\n颜色为: "+color+
                    " and 填充为: "+filled;
      }  
        }
public class Triangle extends GeometricObject{
public String toString() {
		 return "Triangle: side1 = "+side1+" side2 = "+side2+" side3 = "+side3;
	//返回该三角形的字符串描述
	}
	 }

eg:设计一个名为Triangle的类继承GeometricObject类。该类包括:
1.三个名为side1,side2,side3的double类型数据域表示这个三角形的三条边,他们的默认值是1.0.
2.一个无参构造方法,创建一个默认的三角形。
3.一个创建指定side1,side2,side3的值的三角形的构造方法。
4.所有三个数据域的访问器的方法
5.一个名为getArea()的方法返回该三角形的面积。
6.一个名为getPerimeter()的方法返回该三角形的周长。
7.一个名为toString()的方法返回该三角形的字符串描述。
toString()方法实现如下:
return "Triangle: side1 = “+side1+” side2 = “+side2+” side3 = "+side3;
编写一个程序提示用户输入三条边,颜色,以及一个boolean值提示是否填充。程序需要根据输入一个具有指定边的三角形,并设置color和filled属性,显示面积,周长,颜色以及表明是否填充的真假值。

package java题继承;
import java.util.*;  //导入java.util包中的所有类(包括Scanner) 
public class Practice {
	
	public static void main(String[] args) {
    	  Scanner input=new Scanner(System.in); //使用Scanner类读取输入
    	  System.out.print("请输入三角形的三条边的长度,三角形的颜色,是否填充");  //提醒用户输入
    	  double side1=input.nextDouble();
    	  double side2=input.nextDouble();
    	  double side3=input.nextDouble();
    	  //通过Scanner类输入三角形的三条边长度
    	  String c=input.next();
    	  //输入颜色
       	  boolean filled=input.nextBoolean();
       	  //输入是否填充
      
       	  Triangle tri = new Triangle(side1,side2,side3);
       //创建新对象
       	tri.setColor(c);
        tri.setFilled(filled);
        System.out.println("面积是: "+tri.getArea()+" 周长是: "+tri.getPerimeter()+
                "\n颜色是: "+tri.getColor()+" 是否填充: "+tri.isFilled());

    	  
      }
}
package java题继承;
import java.util.*; //导入java.util包中的所有类(包括Date)
class GeometricObject {
    private String color="white";
    private boolean filled;
    private Date dateCreated;
    //设置默认值和对象创建的日期
    public GeometricObject() {
    	dateCreated=new Date();
    	//创建一个GeometricObject 
    }
    public GeometricObject(String color,boolean filled) {
    	dateCreated=new Date();
        this.color=color;
        this.filled=filled;
        //创建一个带特定颜色和填充的GeometricObject   
    }
        //用this引用方法中的数据域名字
        public String getColor(){
            return color;
        }
        public void setColor(String color){
            this.color=color;
        }
        public boolean isFilled(){
            return filled;
        }
        public void setFilled(boolean filled){
            this.filled=filled;
        }
        public Date getDateCreated(){
            return dateCreated;
        }
        //设置并返回新的颜色,新的filled属性确认是否填充,返回dateCreated
        public String toString(){
            return "该图形创造于 "+dateCreated+"\n颜色为: "+color+
                    " and 填充为: "+filled;
        }
   
   
    }


package java题继承;

public class Triangle extends GeometricObject{
	private double side1;
	private double side2;
	private double side3;
	
	public Triangle(){
       side1=side2=side3=1;
      //默认三条边值为1
	}
    public Triangle(double s1,double s2,double s3){
        super();
      //调用父类中已有的方法,设置新的三边边长
        side1=s1;
        side2=s2;
        side3=s3;
    }
    public double getSide1(){
        return side1;
    }
    public double getSide2(){
        return side2;
    }
    public double getSide3(){
        return side3;
    }
     //返回三条边长  
    public double getArea() {
	   double s=(side1+side2+side3)/2;
       return Math.sqrt(s*(s-side1)*(s-side2)*(s-side3));
   }
       //返回三角形的面积
    public double getPerimeter() {
	 return side1+side2+side3;
    }
	 //返回三角形的周长
	 public String toString() {
		 return "Triangle: side1 = "+side1+" side2 = "+side2+" side3 = "+side3;
	//返回该三角形的字符串描述
	 }
    }
   


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值